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:

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

Resultatet i våre fangstgrupper vil være som følger:

javascriptconsole.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:

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

Resultatet i den første fangstgruppen vil være vårt tall:

javascriptconsole.log(res[1]); // vil skrive ut '123'