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:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
V dôsledku budeme mať v našich zachytávacích skupinách nasledovné:
console.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:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
V dôsledku bude v našej prvej zachytávacej skupine naše číslo:
console.log(res[1]); // vypíše '123'