Icke-fångande parenteser i JavaScript regex

Parenteser ( ) har två funktioner - gruppering av tecken och funktionen att fånga (capture group). Men vad gör man om man vill gruppera, men inte fånga? För att lösa detta problem har speciella icke-fångande parenteser (?: ) skapats - de grupperar, men fångar inte.

Exempel

I följande exempel behöver vi den första parentesen för gruppering, och den andra - för att fånga. Däremot fångar båda parenteserna data i capture groups:

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

Som ett resultat kommer våra capture groups att innehålla följande:

javascriptconsole.log(res[0]); // skriver ut 'abab123'
console.log(res[1]); // skriver ut 'ab'
console.log(res[2]); // skriver ut '123'

Exempel

Låt oss göra så att den första parentesen endast grupperar, men inte fångar:

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

Som ett resultat kommer vårt nummer att finnas i den första capture groupen:

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