Parênteses não capturadores em expressões regulares JavaScript
Os parênteses ( ) desempenham duas funções -
agrupamento de caracteres e a função de captura. E
o que fazer se precisamos agrupar,
mas não capturar?
Para resolver esse problema, foram criados
parênteses não capturadores (?: )
- eles agrupam, mas não capturam.
Exemplo
No exemplo a seguir, os primeiros parênteses são necessários para agrupamento, e os segundos - para captura. No entanto, ambos os tipos de parênteses salvam dados na captura:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
Como resultado, nossas capturas conterão o seguinte:
console.log(res[0]); // exibirá 'abab123'
console.log(res[1]); // exibirá 'ab'
console.log(res[2]); // exibirá '123'
Exemplo
Vamos fazer com que o primeiro par de parênteses apenas agrupe, mas não capture:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
Como resultado, nossa primeira captura será o número:
console.log(res[1]); // exibirá '123'