Paranteze care nu captează în expresiile regulate JavaScript
Parantezele ( ) îndeplinesc două funcții -
gruparea caracterelor și funcția de captură. Și
ce să faci dacă trebuie să grupăm,
dar să nu captăm?
Pentru a rezolva această problemă au fost create
parantezele care nu captează (?: )
- ele grupează, dar nu capturează.
Exemplu
În exemplul următor, primele paranteze ne sunt necesare pentru grupare, iar celelalte - pentru captură. Cu toate acestea, ambele tipuri de paranteze salvează date în captură:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
Ca rezultat, în capturile noastre va fi următoarele:
console.log(res[0]); // va afișa 'abab123'
console.log(res[1]); // va afișa 'ab'
console.log(res[2]); // va afișa '123'
Exemplu
Să facem astfel încât prima pereche de paranteze să doar grupeze, dar să nu captureze:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
Ca rezultat, în prima captură va fi numărul nostru:
console.log(res[1]); // va afișa '123'