Незахващащи скобки в регулярните изрази на JavaScript

Скобите ( ) изпълняват две функции - групиране на символи и функция на захващаща група. А какво да правим, ако трябва да групираме, но да не захващаме в група? За решаване на този проблем са създадени специални незахващащи скобки (?: ) - те групират, но не захващат в група.

Пример

В следващия пример първите скоби са ни необходими за групиране, а вторите - за захващаща група. Обаче, и едните, и другите скоби запазват данни в група:

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

В резултат в нашите захващащи групи ще има следното:

javascriptconsole.log(res[0]); // ще изведе 'abab123'
console.log(res[1]); // ще изведе 'ab'
console.log(res[2]); // ще изведе '123'

Пример

Нека направим така, че първата двойка скоби само да групира, но да не захваща в група:

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

В резултат в първата захващаща група ще бъде нашето число:

javascriptconsole.log(res[1]); // ще изведе '123'