Nezachytávající závorky v regulárních výrazech JavaScriptu
Závorky ( ) plní dvě funkce -
seskupování znaků a funkci zachytávání. A
co dělat, když potřebujeme seskupit,
ale nechceme zachytávat?
Pro řešení tohoto problému byly vytvořeny speciální
nezachytávající závorky (?: )
- ty seskupují, ale nezachytávají.
Příklad
V následujícím příkladu potřebujeme první závorky pro seskupení a druhé - pro zachytávání. Avšak oba typy závorek ukládají data do zachytávacích skupin:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
V důsledku budou naše zachytávací skupiny obsahovat následující:
console.log(res[0]); // vypíše 'abab123'
console.log(res[1]); // vypíše 'ab'
console.log(res[2]); // vypíše '123'
Příklad
Upravíme výraz tak, aby první pár závorek pouze seskupoval, ale nezachytával:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
V důsledku bude v první zachytávací skupině naše číslo:
console.log(res[1]); // vypíše '123'