Bonjour à tous,
Vous connaissez les groupes capturants des RegExps...
Il y a plusieurs méthodes pour les récupérer mais toutes ne sont pas bonnes. En effet, vous pourriez avoir de bien mauvaises surprises !
La pratique courante (utilisation du résultat en tant qu'Array) :
Ce n'est pas très pratique, car vous allez devoir parcourir ce tableau et cela n'est pas top en termes de lisibilité.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 var matches; matches = '123'.match(/^(.)(.)(.)$/); // ['123','1','2','3']
L'exemple à ne surtout pas faire ! (utilisation de propriétés statiques du constructeur RegExp) :
Que s'est-il passé? C'est assez simple, les propriétés RegExp.$n, étant statiques, seul le dernier résultat ayant correspondu au masque est mis en mémoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 var fct1, fct2; fct1 = function fct1(str) { str.match(/^(.*)$/); fct2('def'); return RegExp.$1; }; fct2 = function fct2(str) { str.match(/^(.*)$/); }; fct1('abc'); // def, au lieu de abc
La solution la plus lisible et pratique à manipuler (utilisation de labels) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 var str; str = '123'; str.replace(/^(.)(.)(.)$/, function(source, label1, label2, label3) { // traitez ici vos groupes nommés });
Partager