Paréntesis no capturadores en expresiones regulares de JavaScript

Los paréntesis ( ) realizan dos funciones - agrupar caracteres y la función de grupo de captura. ¿Y qué hacemos si necesitamos agrupar, pero no queremos capturar? Para resolver este problema se crearon los paréntesis no capturadores (?: ) - agrupan, pero no capturan en un grupo.

Ejemplo

En el siguiente ejemplo, los primeros paréntesis los necesitamos para agrupar, y los segundos - para capturar. Sin embargo, ambos tipos de paréntesis guardan datos en un grupo de captura:

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

Como resultado, en nuestros grupos de captura tendremos lo siguiente:

javascriptconsole.log(res[0]); // mostrará 'abab123'
console.log(res[1]); // mostrará 'ab'
console.log(res[2]); // mostrará '123'

Ejemplo

Hagamos que el primer par de paréntesis solo agrupe, pero no capture en un grupo:

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

Como resultado, en el primer grupo de captura estará nuestro número:

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