Nem rögzítő zárójelek a JavaScript reguláris kifejezéseiben

A ( ) zárójelek két funkciót töltenek be - a karakterek csoportosítását és a zárójel (capturing group) funkciót. De mit tegyünk, ha csoportosítanunk kell, de nem akarunk zárójelbe (capturing group) helyezni? A probléma megoldására találták ki a speciális nem rögzítő zárójeleket (?: ) - ezek csoportosítanak, de nem helyeznek zárójelbe (capturing group).

Példa

A következő példában az első zárójelek a csoportosításhoz kellenek, az másodikak pedig a zárójelhez (capturing group). Azonban mindkét zárójel típus a zárójelbe (capturing group) helyezi az adatokat:

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

Ennek eredményeképpen a zárójeleinkben (capturing groups) a következők lesznek:

javascriptconsole.log(res[0]); // kiírja 'abab123'
console.log(res[1]); // kiírja 'ab'
console.log(res[2]); // kiírja '123'

Példa

Változtassuk meg úgy, hogy az első zárójelpár csak csoportosítson, de ne helyezzen zárójelbe (capturing group):

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

Ennek eredményeképpen az első zárójelben (capturing group) a számunk lesz:

javascriptconsole.log(res[1]); // kiírja '123'