Nezachytávajúce zátvorky v regulárnych výrazoch JavaScript

Zátvorky ( ) vykonávajú dve funkcie - zoskupovanie znakov a funkciu zachytenia (capture group). A čo robiť, ak potrebujeme zoskupiť, ale nechceme zachytiť? Na vyriešenie tohto problému boli vytvorené špeciálne nezachytávajúce zátvorky (?: ) - tie zoskupujú, ale nezachytávajú.

Príklad

V nasledujúcom príklade potrebujeme prvé zátvorky pre zoskupenie a druhé - pre zachytenie. Avšak, oboje zátvorky ukladajú údaje do zachytávacej skupiny:

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

V dôsledku budeme mať v našich zachytávacích skupinách nasledovné:

javascriptconsole.log(res[0]); // vypíše 'abab123'
console.log(res[1]); // vypíše 'ab'
console.log(res[2]); // vypíše '123'

Príklad

Upravíme to tak, aby prvá para zátvoriek len zoskupovala, ale nezachytávala:

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

V dôsledku bude v našej prvej zachytávacej skupine naše číslo:

javascriptconsole.log(res[1]); // vypíše '123'