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:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
Como resultado, en nuestros grupos de captura tendremos lo siguiente:
console.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:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
Como resultado, en el primer grupo de captura estará nuestro número:
console.log(res[1]); // mostrará '123'