[RegExp] Nommez vos groupes capturants
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) :
Code:
1 2
| var matches;
matches = '123'.match(/^(.)(.)(.)$/); // ['123','1','2','3'] |
Ce n'est pas très pratique, car vous allez devoir parcourir ce tableau et cela n'est pas top en termes de lisibilité.
L'exemple à ne surtout pas faire ! (utilisation de propriétés statiques du constructeur RegExp) :
Code:
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 |
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.
La solution la plus lisible et pratique à manipuler (utilisation de labels) :
Code:
1 2 3 4 5
| var str;
str = '123';
str.replace(/^(.)(.)(.)$/, function(source, label1, label2, label3) {
// traitez ici vos groupes nommés
}); |