Bonjour. visiteurs jour : 227
Au président
Beauté santé
Infos loisirs
Ensemble
Jean
Informatique
Einstein
Santé corona
Les joies de l'informatique et de l'internet !
Accueil - Disques - Excel - Informatique - Infos - Internet - Javascript - logiciels - Programation - Sites RJ - Vidéo - Plan du site -
String.replace(motif_a_remplacer, motif_de_remplacement); Le plus simple, remplacer une seule occurrence
var String="Bonjour Jacques ..! Bonjour Marie ! Salut tout le monde ..!"; String devient :
"Bonjour Jacques..! Bonjour Marie ! Bonjour tout le monde ..!"
Pour remplacer toutes les occurrences du mot "Bonjour" par "Salut" le paramètre g dit de rechercher toutes les occurrences. le paramètre i dit quelque soit la case majuscules ou minuscules var newString=myString.replace(/Bonjour/gm ,"Salut");
le résultat dans String = "Salut Jacques..! Salut Marie ! Salut tout le monde ..!"
Instanciation d'un objet RegExp : var myRegex = /contenu_à_rechercher/; échapper les / en utilisant un anti-slash : if (/raclette/.test('Je mangerais bien une raclette savoyarde !')) {// Le test retourne vrai si trouvé /raclette¦tartiflette/ = vrai si trouve l'un ou l'autre mot ou les deux Pour définir les informations à extraire, on utilise des parenthèses, que l'on appelle parenthèses capturantes. Exemple soit : « Je suis né en mars ». Avec les parenthèses capturantes, nous allons extraire le mois de la naissance, pour le réutiliser : Toutes les parenthèses n'ont pas besoin de capturer quelque chose, si on vérifie une URL, on peut commencer la regex comme ceci : /(https¦http¦ftp¦steam):///
Javascript remplacer une série de caractères par une autre
dans une chaîne (string)
si on veut remplacer le mot "Salut" par "Bonjour" , on pourra écrire ;
var String=String.replace("Salut","Bonjour");
certains navigateurs ne supporte pas le fait d écrire les expression régulière entre barres obliques dans ce cas utiliser l'expression régulière RegExp
var myRegEx=new RegExp("Bonjour","gm");
var String=String.replace(myRegEx ,"Salut");
var regAccentA = new RegExp('[àâä]', 'gi');
document.write(txt); affiche Caracteres accentues a remplacer : a a a et e e e
Les expressions régulières
var regex_2 = /<p>contenu_</p>/; // La syntaxe est bonne car le slash est échappé avec
alert('Ça semble parler de raclette');
} else alert('Pas de raclette à l'horizon');
Eexclusion d'un intervalle : [^b-y] exclue les lettres de b à y.
Les caractères accentués. [a-z] ne trouve pas à, é, â etc. [a-zâäàéèùêëîïôöçñ] les trouvent.
Pour intercepter majuscules et miniscule utiliser l'option i : /[a-zâäàéèùêëîïôöçñ]/i.
/gr[.}]s/ trouve gras, grès, gris et même grws !
Les quantificateurs permettent de dire combien de fois un caractère doit être recherché. Il est possible de dire qu'un caractère peut apparaître 0 ou 1 fois, 1 fois ou une infinité de fois, ou même, avec des accolades, de dire qu'un caractère peut être répété 3, 4, 5 ou 10 fois.
+ : le caractère qui le précède peut apparaître 1 ou plusieurs fois (illimité);
* : le caractère qui le précède peut apparaître 0, 1 ou plusieurs fois (illimité).
Reprenons notre raclette. Il y a deux t, mais il se pourrait que l'utilisateur ait fait une faute de frappe et n'en ait mis qu'un seul. On va donc écrire une regex capable de gérer ce cas de figure : /raclett?e/
Ici, le premier t sera trouvé, et le ? signifie que le deuxième t peut apparaître 0 ou 1 fois. Raclette sera trouvéee avec 1 ou 2t ! Elle est pas belle la vie ?
/raclet+e/
Avec le symbole *, la lettre est facultative mais peut être répétée un nombre infini de fois. En utilisant *, la regex précédente peut s'écrire : /raclett*e/
Regex /Hellow+/
Résultat true
Regex /Go{2,}gle/
Résultat true
Regex /Le [1-9][a-z]{2,3} septembre/
Résultat true
Regex /Le [1-9][a-z]{2,3}[a-z]+/
Résultat false
Un problème se pose si on veut chercher ces caractères tel une accolade il faut la faire précéder d'un antislash : { du coup pour rechercher un antislash il faut le faire précéder d'un antislash
Les types génériques
D Trouve un caractère qui n'est pas décimal (donc pas un chiffre)
s Trouve un caractère blanc
S Trouve un caractère qui n'est pas un caractère blanc
w Trouve un caractère « de mot » : une lettre, accentuée ou non, ainsi que l'underscore
W Trouve un caractère qui n'est pas un caractère « de mot »
En plus de cela existent les caractères de type « espace blanc » :
Trouve un retour à la ligne
Trouve une tabulation
Ces deux caractères sont reconnus par le type générique s (qui trouve, pour rappel, n'importe quel espace blanc).
En résumé
Plusieurs méthodes de l'objet String peuvent être utilisées avec des regex, à savoir match(), search(), split() et replace().
L'option i indique à la regex que la casse doit être ignorée.
Les caractères ^ et $ indiquent respectivement le début et la fin de la chaîne de caractères.
Les classes et les intervalles de caractères, ainsi que les types génériques, servent à rechercher un caractère possible parmi plusieurs.
Les différents métacaractères doivent absolument être échappés.
Les quantificateurs servent à indiquer le nombre de fois qu'un caractère peut être répété.
Pratique
On ajoute l'arobase. Ce n'est pas un métacaractère pas besoin de l'échapper : /^[a-z0-9._-]+@$/
Après vient le label du nom de domaine, lui aussi composé de lettres, de chiffres, de tirets et de traits de soulignement. Ne pas oublier le point, car il peut s'agir d'un sous-domaine (par exemple @tutoriels.siteduzero.com) : /^[a-z0-9._-]+@[a-z0-9._-]+$/
Puis le point de l'extension du domaine : ne pas oublier de l'échapper, c'est un métacaractère :
/^[a-z0-9._-]+@[a-z0-9._-]+.$/
Et pour finir, l'extension ! Une extension de nom de domaine ne contient que des lettres, au minimum 2, au maximum 6. Ce qui fait : /^[a-z0-9._-]+@[a-z0-9._-]+.[a-z]{2,6}$/
Testons : var email = prompt("Entrez votre adresse e-mail :", "javascript@siteduzero.com");
if (/^[a-z0-9._-]+@[a-z0-9._-]+.[a-z]{2,6}$/.test(email))
L'adresse e-mail est détectée comme étant valide !
var sentence = "Si ton tonton";
var result = /btonb/.exec(sentence); // On cherche à récupérer le mot « ton »
if (result) { // On vérifie que ce n'est pas null
alert(result); // Affiche « ton »
L'objet RegExp contient neuf propriétés, appelées $1, $2, $3
jusqu'à $9.
Les parenthèses capturantes
var birth = 'Je suis né en mars';
/^Je suis né en (S+)$/.exec(birth);
alert(RegExp.$1); // Affiche : « mars »
Comme les mois sont faits de caractères qui peuvent être accentués, on peut directement utiliser le type générique S. S+ indique qu'on recherche une série de caractères, jusqu'à la fin de la chaîne (délimitée, pour rappel, par $) La recherche démarre à la suite des caractères trouvés "je suis né en"
La regex (le contenu entre / et / est exécutée via exec(). Le contenu des parenthèses capturantes est enregistré temporairement au sein de l'objet RegExp. Le premier couple de parenthèses sera enregistré dans la propriété $1, le deuxième dans $2 ainsi de suite, jusqu'au neuvième, dans $9. Les couples sont numérotés suivant le sens de lecture, de gauche à droite. Pour accéder aux propriétés, il suffit de faire RegExp.$1, RegExp.$2, etc.
Voici un autre exemple décomposer une adresse e-mail pour récupérer les différentes parties :
var email = prompt("Entrez votre adresse e-mail :", "javascript@siteduzero.com");
if (/^([a-z0-9._-]+)@([a-z0-9._-]+).([a-z]{2,6})$/.test(email)) {
alert('Partie locale : ' + RegExp.$1 + 'Domaine : ' + RegExp.$2 + 'Extension : ' + RegExp.$3);
} else {alert('Adresse e-mail invalide !'); }
Mais si on n'a pas besoin de capturer ce texte on fait suivre ( de ?: -> /(?:https¦http¦ftp¦steam):///
De cette manière, cette parenthèse n'aura aucune incidence sur les propriétés $ de RegExp !
Utiliser les parenthèses capturantes pour extraire des informations et les réutiliser au sein de la chaîne de remplacement.
var date = '05/26/2011';
date = date.replace(/^(d{2})/(d{2})/(d{4})$/, 'Le $2/$1/$3');
alert(date); // Le 26/05/2011
Chaque nombre est capturé avec une parenthèse dans $1, $2 et $3 qu'on réinjecte dans la chaîne de caractères dans un ordre différent : 2, 1, 3.