Wenn meine RegExp
eine Reihe von einfangenden Gruppen hat, möchte ich wissen, welche Gruppe die Erfassung (oder zumindest die erste/letzte solche Gruppe, wenn es mehrere waren) gemacht. Wenn Sie mit Python vertraut sind, entspricht dies im Wesentlichen dem re.MatchObject.lastgroup
. Einige Code, um es deutlicher:Effizient finden, welche Gruppe in einer RegExp Suche übereinstimmt
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));
}
Er druckt:
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' ]
Die result
Array zeigt, welche Gruppen eine Aufnahme gemacht, aber ich sehe keine Möglichkeit, schnell für jede gegebene Spiel, um herauszufinden, welche Gruppe übereinstimmte ohne durch das Array zu durchlaufen. Dies ist nützlich in Fällen, in denen große Regexes programmatisch erstellt werden und das Iterieren ineffizient ist.
Fehle ich etwas offensichtlich, oder ist es nicht möglich?
Ich glaube nicht, dass es möglich ist. Aber was genau machst du, wenn das ineffizient wird? Es könnte eine bessere Lösung geben als große Regexes mit großen Ergebnissen. – Bergi
@Bergi: re meine Verwendung, sehen Sie den länglichen Kommentar, den ich zu Minitechs Antwort unten gemacht habe. –
Ich weiß, das ist Betrug, aber Sie können 'indexOf' verwenden, um Iteraring explizit zu vermeiden. Sicher, die Engine wird intern iterieren – user123444555621