Mit String
‚s match()
Funktion gibt Gruppen nicht erfasst , wenn die globale Modifikator gesetzt ist, wie Sie herausgefunden haben.
In diesem Fall möchten Sie ein RegExp
Objekt verwenden und dessen exec()
Funktion aufrufen . String
's match()
ist fast identisch mit RegExp
' s exec()
Funktion ... außer in solchen Fällen. Wenn der globale Modifikator festgelegt ist, gibt die normale match()
Funktion keine erfassten Gruppen zurück, während RegExp
die exec()
Funktion dies tut. ( Hier unter anderem notiert.)
Ein weiterer wichtiger Punkt ist, dass exec()
die Übereinstimmungen nicht in einem großen Array zurückgegeben werden. Es werden weiterhin Übereinstimmungen zurückgegeben, bis sie abgelaufen sind. In diesem Fall werden sie zurückgegeben null
.
So könnten Sie beispielsweise Folgendes tun:
var pattern = /t(e)(s)t/g;
var match;
while (match = pattern.exec(text)) {
}
Eine andere Sache zu beachten ist , dass RegExp.prototype.exec()
und RegExp.prototype.test()
den regulären Ausdruck auf der mitgelieferten String auszuführen und das erste Ergebnis zurück. Bei jedem sequentiellen Aufruf wird die Aktualisierung der Ergebnismenge RegExp.prototype.lastIndex
basierend auf der aktuellen Position in der Zeichenfolge schrittweise durchgeführt .
Hier ist ein Beispiel: // Denken Sie daran, dass das Beispiel und das Muster 4 Übereinstimmungen enthalten. lastIndex beginnt bei 0
pattern.test(text);
pattern.test(text);
pattern.exec(text);
pattern.exec(text);
while (var match = pattern.exec(text)) {
console.log(match);
}
pattern.test(text);
pattern.test(text);
pattern.lastIndex = 0;
while (var match = pattern.exec(text)) {
console.log(match);
}
Sie finden Informationen zur Verwendung von RegExp
Objekten im MDN (insbesondere hier die Dokumentation für die exec()
Funktion ).