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:

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

W rezultacie w naszych kieszeniach będzie następująco:

javascriptconsole.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:

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

W rezultacie w pierwszej kieszeni będzie nasza liczba:

javascriptconsole.log(res[1]); // wypisze '123'