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 :

javascriptlet str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);

En conséquence, nos groupes de capture contiendront ce qui suit :

javascriptconsole.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 :

javascriptlet str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);

En conséquence, notre nombre sera dans le premier groupe de capture :

javascriptconsole.log(res[1]); // affichera '123'