Niezachowujące nawiasy w wyrażeniach regularnych JavaScript
Nawiasy ( ) pełnią dwie funkcje -
grupowanie znaków i funkcję kieszeni. A
co zrobić, jeśli potrzebujemy zgrupować,
ale nie umieszczać w kieszeni?
Aby rozwiązać ten problem, wymyślono specjalne
niezachowujące nawiasy (?: )
- grupują, ale nie umieszczają w kieszeni.
Przykład
W następnym przykładzie pierwsze nawiasy są nam potrzebne do grupowania, a drugie - do kieszeni. Jednakże zarówno jedne, jak i drugie nawiasy zachowują dane w kieszeni:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
W rezultacie w naszych kieszeniach będzie następująco:
console.log(res[0]); // wypisze 'abab123'
console.log(res[1]); // wypisze 'ab'
console.log(res[2]); // wypisze '123'
Przykład
Sprawmy, aby pierwsza para nawiasów tylko grupowała, ale nie umieszczała w kieszeni:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
W rezultacie w pierwszej kieszeni będzie nasza liczba:
console.log(res[1]); // wypisze '123'