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:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
Som ett resultat kommer våra capture groups att innehålla följande:
console.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:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
Som ett resultat kommer vårt nummer att finnas i den första capture groupen:
console.log(res[1]); // skriver ut '123'