Parenthèses non capturantes dans les regex JavaScript
Les parenthèses ( ) remplissent deux fonctions -
le regroupement de caractères et la fonction de groupe de capture. Mais
que faire si nous avons besoin de regrouper,
sans capturer dans un groupe ?
Pour résoudre ce problème, des
parenthèses non capturantes spéciales (?: )
ont été inventées - elles regroupent, mais ne capturent pas dans un groupe.
Exemple
Dans l'exemple suivant, les premières parenthèses nous sont nécessaires pour le regroupement, et les secondes - pour la capture. Cependant, les deux types de parenthèses capturent les données dans un groupe :
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
En conséquence, nos groupes de capture contiendront ce qui suit :
console.log(res[0]); // affichera 'abab123'
console.log(res[1]); // affichera 'ab'
console.log(res[2]); // affichera '123'
Exemple
Faisons en sorte que la première paire de parenthèses seulement regroupe, sans capturer dans un groupe :
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
En conséquence, notre nombre sera dans le premier groupe de capture :
console.log(res[1]); // affichera '123'