Erfassen mehrerer Gruppen in regulären JavaScript-Ausdrücken
Bei der Arbeit mit regulären Ausdrücken in JavaScript kommt es häufig zu Situationen, in denen Sie mehrere Gruppen erfassen müssen Gruppen von Daten. In einigen Fällen wird jedoch möglicherweise nicht das erwartete Verhalten der Erfassung aller übereinstimmenden Gruppen erreicht.
Betrachten Sie beispielsweise den folgenden JavaScript-Code:
"foo bar baz".match(/^(\s*\w+)+$/)
Sie können davon ausgehen, dass der Code zurückkehrt ein Array, das alle erfassten Übereinstimmungen enthält:
["foo bar baz", "foo", " bar", " baz"]
Das tatsächliche Ergebnis ist jedoch:
["foo bar baz", " baz"]
Dies geschieht, weil Wenn Sie in regulären Ausdrücken eine Erfassungsgruppe wiederholen, wird nur die letzte Erfassung beibehalten. Dies ist das Standardverhalten in den meisten Regex-Varianten.
Problemumgehungen für die Erfassung aller Übereinstimmungen
Wenn Sie alle übereinstimmenden Gruppen erfassen müssen, stehen Ihnen einige Optionen zur Verfügung :
Beispiel mit einer Exec-Schleife
Das folgende Beispiel demonstriert den Abgleich mehrere Gruppen mithilfe einer Exec-Schleife:
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) { console.log(match[1].split(";")); } // [ 'c', 'd', 'e', 'f' ] // [ 'xx', 'yy', 'zz' ]
Zusätzliche Ressourcen
Das obige ist der detaillierte Inhalt vonWarum erfasst JavaScript Regex nur die letzte Gruppe in einer Wiederholung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!