RegExp
benim bir dizi yakalama grubuna sahip olduğunda, hangi grubun yakalamayı yaptığını bilmek istiyorum (veya en az biri varsa, bu tür ilk gruptan en az biri). Python ile aşina iseniz, bu temelde re.MatchObject.lastgroup
eşdeğeridir. Bazı kod daha anlaşılabilir olması için: gruplar yakalama yapılmışBir RegExp aramasında hangi grubun eşleştiğini verimli bir şekilde bulun
for at 1 [ undefined, 'for', undefined ]
me at 5 [ undefined, undefined, 'me' ]
20 at 8 [ '20', undefined, undefined ]
boxes at 11 [ undefined, undefined, 'boxes' ]
please at 17 [ undefined, undefined, 'please' ]
result
dizi gösterileri, ama hızla verilen her maç, grup için öğrenmek için hiçbir şekilde bakın:
var re_captures = new RegExp("(\\d+)|(for)|(\\w+)", "g");
var str = " for me 20 boxes please";
var result;
while ((result = re_captures.exec(str)) !== null) {
console.log(result[0], 'at', result.index, result.slice(1));
}
O yazdırır dizisini yinelemeden ile eşleşti. Bu, büyük regexlerin programlı olarak oluşturulduğu ve yinelemenin verimsiz olduğu durumlarda yararlı olur.
Belirgin bir şey eksik mi, ya da mümkün değil mi?
Bunun mümkün olduğunu düşünmüyorum. Ama bu verimsiz hale geldiğinde tam olarak ne yapıyorsunuz? Büyük sonuçlara sahip büyük regeekslerden daha iyi bir çözüm olabilir. – Bergi
@Bergi: Benim kullanımım, minimarkın yorumunu aşağıda minitech'in cevabına yaptım. –
Bunun hile olduğunu biliyorum, ancak açıkça indekslemekten kaçınmak için 'indexOf' kullanabilirsiniz. Elbette, motor dahili olarak – user123444555621