Незахващащи скобки в регулярните изрази на JavaScript
Скобите ( ) изпълняват две функции -
групиране на символи и функция на захващаща група. А
какво да правим, ако трябва да групираме,
но да не захващаме в група?
За решаване на този проблем са създадени специални
незахващащи скобки (?: )
- те групират, но не захващат в група.
Пример
В следващия пример първите скоби са ни необходими за групиране, а вторите - за захващаща група. Обаче, и едните, и другите скоби запазват данни в група:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
В резултат в нашите захващащи групи ще има следното:
console.log(res[0]); // ще изведе 'abab123'
console.log(res[1]); // ще изведе 'ab'
console.log(res[2]); // ще изведе '123'
Пример
Нека направим така, че първата двойка скоби само да групира, но да не захваща в група:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
В резултат в първата захващаща група ще бъде нашето число:
console.log(res[1]); // ще изведе '123'