Ich würde diese Zeile von JavaScript erwarten:
"foo bar baz".match(/^(\s*\w+)+$/)
um etwas zurückzugeben wie:
["foo bar baz", "foo", " bar", " baz"]
stattdessen wird nur das zuletzt erfasste Match zurückgegeben:
["foo bar baz", " baz"]
Gibt es eine Möglichkeit, alle erfassten Übereinstimmungen zu erhalten?
Wenn Sie eine Erfassungsgruppe in den meisten Varianten wiederholen, wird nur die letzte Erfassung beibehalten. Alle vorherigen Aufnahmen werden überschrieben. In einigen Geschmacksrichtungen, z.B. .NET, Sie können alle Zwischenerfassungen abrufen, aber dies ist 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 Match, auch wenn einige dieser Gruppen wiederholt wurden.
Im Allgemeinen also, je nachdem, was Sie tun müssen:
/(pattern)+/
zuzuordnen, kann /pattern/g
, vielleicht in einer exec
Schleife Hier ist ein Beispiel für die Zuordnung von <some;words;here>
in einem Text mit einer exec
-Schleife und anschließender Aufteilung auf ;
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(";"));
}
// c,d,e,f
// xx,yy,zz
Das verwendete Muster ist:
_2__
/ \
<(\w+(;\w+)*)>
\__________/
1
Dies entspricht <Word>
, <Word;another>
, <Word;another;please>
usw. Gruppe 2 wird wiederholt, um eine beliebige Anzahl von Wörtern zu erfassen, kann jedoch nur die letzte Erfassung beibehalten. Die gesamte Wortliste wird von Gruppe 1 erfasst. Diese Zeichenfolge ist dann split
auf dem Semikolon-Trennzeichen.
Wie ist das? "foo bar baz".match(/(\w+)+/g)
Sofern Sie keine komplizierteren Anforderungen für die Aufteilung Ihrer Zeichenfolgen haben, können Sie diese aufteilen und dann die ursprüngliche Zeichenfolge mit diesen zurückgeben:
var data = "foo bar baz";
var pieces = data.split(' ');
pieces.unshift(data);
versuche es mit 'g':
"foo bar baz".match(/\w+/g)