Wenn Sie eine Erfassungsgruppe wiederholen, wird in den meisten Varianten nur die letzte Erfassung beibehalten. Alle vorherigen Erfassungen werden überschrieben. In einigen Varianten, z. B. .NET, können Sie alle Zwischenerfassungen erhalten, dies ist jedoch bei Javascript nicht der Fall.
Das heißt, wenn Sie in Javascript ein Muster mit N Erfassungsgruppen haben, können Sie nur genau N Zeichenfolgen pro Übereinstimmung erfassen , selbst wenn einige dieser Gruppen wiederholt wurden.
Im Allgemeinen also, je nachdem, was Sie tun müssen:
- Wenn dies eine Option ist, teilen Sie stattdessen die Trennzeichen auf
- Anstatt zu
/(pattern)+/
passen /pattern/g
, vielleicht zu passen , vielleicht in einer exec
Schleife
- Beachten Sie, dass diese beiden nicht genau gleichwertig sind, dies kann jedoch eine Option sein
- Führen Sie einen mehrstufigen Abgleich durch:
- Erfassen Sie die wiederholte Gruppe in einem Spiel
- Führen Sie dann einen weiteren regulären Ausdruck aus, um das Match auseinanderzubrechen
Verweise
Beispiel
Hier ist ein Beispiel für das Abgleichen <some;words;here>
in einem Text mithilfe einer exec
Schleife und das anschließende Aufteilen ;
, um einzelne Wörter zu erhalten ( siehe auch auf ideone.com ):
var text = "a;b;<c;d;e;f>;g;h;i;<no no no>;j;k;<xx;yy;zz>";
var r = /<(\w+(;\w+)*)>/g;
var match;
while ((match = r.exec(text)) != null) {
print(match[1].split(";"));
}
Das verwendete Muster ist:
_2__
/ \
<(\w+(;\w+)*)>
\__________/
1
Dazu passt <word>
, <word;another>
, <word;another;please>
etc. Gruppe 2 wird wiederholt eine beliebige Anzahl von Wörtern zu erfassen, aber es kann nur die letzte Erfassung halten. Die gesamte Liste der Wörter wird von Gruppe 1 erfasst. Diese Zeichenfolge befindet sich dann split
im Semikolon-Trennzeichen.
Verwandte Fragen
"foo bar baz".match(/\w+/g) //=> ["foo", "bar", "baz"]
. Es ignoriert die übereinstimmende Zeichenfolge an der Vorderseite, ist aber immer noch eine vernünftige Alternative.Sofern Sie keine komplizierteren Anforderungen für die Aufteilung Ihrer Zeichenfolgen haben, können Sie diese aufteilen und dann die ursprüngliche Zeichenfolge mit ihnen zurückgeben:
var data = "foo bar baz"; var pieces = data.split(' '); pieces.unshift(data);
quelle
versuche es mit 'g':
"foo bar baz".match(/\w+/g)
quelle