Les différentes actions des RegExp
L'objet RegExp possède plusieurs méthodes qui ont différents effets.
Nous avons déjà vu la méthode test() qui valide une chaîne de caractères en fonction d'un motif.
La méthode exec() retourne un tableau des occurences répondant aux critères du motif.
Sur l'objet string, il existe également des méthodes qui attendent en paramètres une expression régulière.
La méthode search() permet de trouver des occurences répondant aux critères du motif.
La méthode replace() permet de trouver et de remplacer des occurences répondant aux critères du motif.
La méthode match() permet de trouver des occurences répondant aux critères du motif.
Exemple d'utilisation de split() et match()
Supposons une liste de noms séparés par des virgules, des espaces ou des points-virgules, mais dont le format n'est pas uniforme.
Les expressions régulières vont nous permettre de créer un tableau avec tous les noms correctement isolés.
Pour l'extraction par split(), cette fonction est utilisée :
function ExtraireNom(chaine) {
var exp=new RegExp("[, ;]+","g");
var tabNom=chaine.split(exp);
if (tabNom==null) {alert("Problème dans l'expression !");}
else {
var affichage="Nombre de noms trouvés = " + tabNom.length + "\n";
for (var i=0;i<tabNom.length;i++){
affichage=affichage + " ["+ tabNom[i] + "]\n";
}
alert(affichage);
}
}
La méthode split() créé un tableau qui contient tous les éléments trouvés entre le séparateur défini par l'expression régulière.
Pour l'extraction par match(), cette fonction est utilisée :
function ExtraireNom2(chaine) {
var exp=new RegExp("[a-zA-Z\-]+","g");
var tabNom=chaine.match(exp);
if (tabNom==null) {alert("Problème dans l'expression !");}
else {
var affichage="Nombre de noms trouvés = " + tabNom.length + "\n";
for (var i=0;i<tabNom.length;i++){
affichage=affichage + " ["+ tabNom[i] + "]\n";
}
alert(affichage);
}
}
La méthode match() créé un tableau qui contient tous les éléments qui correspondent à l'expression régulière.
Encore une utilisation de la méthode match() :
function ExtraireMail(chaine) {
var exp=new RegExp("[a-zA-Z0-9\-_]+[a-zA-Z0-9\.\-_]*@[a-zA-Z0-9\-_]+\.[a-zA-Z\.\-_]{1,}[a-zA-Z\-_]+","g");
var tabMail=chaine.match(exp);
if (tabMail==null) {alert("Problème dans l'expression !");}
else {
var affichage="Nombre de mails trouvés = " + tabMail.length + "\n";
for (var i=0;i<tabMail.length;i++){
affichage=affichage + " ["+ tabMail[i] + "]\n";
}
alert(affichage);
}
}
Voici la fonction qui crée le tableau de paramètres :
function TJS_ExtractURL(url) {
var regexp=new RegExp("[?&]");
var tab=url.split(regexp);
tabparam=new Array;
for (var i=1;i<tab.length;i++){
tabparam[tab[i].substring(0,tab[i].indexOf("="))]=tab[i].substring(tab[i].indexOf("=")+1)
}
}
Ici, on remplace tous les "e" accentés par un "e".
chaine=chaine.replace(/[éèêë]/g,"e");
Rendre un mail cliquable
La fonction remplace permet également de retenir des valeurs trouvées dans l'expression et de les réutiliser dans la chaîne de remplacement.
Par exemple pour la chaîne de texte suivante :
Après traitement, la chaîne de texte devient :
function TJS_EmailCliquable(email) {
var exp=new RegExp("([a-zA-Z0-9\.\-_]+@[a-zA-Z0-9\-_]+\.[a-zA-Z0-9]{2,})","g");
return email.replace(exp,"<A href='mailto:$1'>$1</A>");
}
Rendre une adresse url cliquable
Après traitement, la chaîne de texte devient :
function TJS_UrlCliquable(url) {
var exp1=new RegExp("((ht|f)tps?://.*)[\\s]+","gi");
return url.replace(exp1,"<A href='$1'>$1</A>");
}
Pour conclure
Les expressions régulières offrent une immense palette de possibilités. Il suffit d'imaginer.
Une expression régulière n'est jamais terminée. Il est toujours possible de l'améliorer et de l'enrichir.
A vous de jouer ! Essayez aussi l'outil indispensable de r0bl0che