Ikke-fangende parenteser i JavaScript regex
Parentesene ( ) utfører to funksjoner -
gruppering av tegn og fangstfunksjon. Men
hva gjør vi hvis vi trenger å gruppere,
uten å fange?
For å løse dette problemet er det spesielle
ikke-fangende parenteser (?: )
utviklet - de grupperer, men fanger ikke.
Eksempel
I det følgende eksempelet trenger vi de første parentesene for gruppering, og de andre - for fangst. Imidlertid lagrer begge typer parenteser data i fangstgrupper:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
Resultatet i våre fangstgrupper vil være som følger:
console.log(res[0]); // vil skrive ut 'abab123'
console.log(res[1]); // vil skrive ut 'ab'
console.log(res[2]); // vil skrive ut '123'
Eksempel
La oss gjøre slik at det første paret med parenteser bare grupperer, uten å fange:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
Resultatet i den første fangstgruppen vil være vårt tall:
console.log(res[1]); // vil skrive ut '123'