Heim > Web-Frontend > js-Tutorial > Hauptteil

Warum erfasst JavaScript Regex nur die letzte Gruppe in einer Wiederholung?

Mary-Kate Olsen
Freigeben: 2024-11-11 04:12:02
Original
234 Leute haben es durchsucht

Why Does JavaScript Regex Capture Only the Last Group in a Repetition?

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+)+$/)
Nach dem Login kopieren

Sie können davon ausgehen, dass der Code zurückkehrt ein Array, das alle erfassten Übereinstimmungen enthält:

["foo bar baz", "foo", " bar", " baz"]
Nach dem Login kopieren

Das tatsächliche Ergebnis ist jedoch:

["foo bar baz", " baz"]
Nach dem Login kopieren

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 :

  • Nach Trennzeichen aufteilen: Wenn das Muster, das Sie abgleichen möchten, enthält Wenn Sie Trennzeichen verwenden, sollten Sie die Split-Methode anstelle eines regulären Ausdrucks verwenden. Dieser Ansatz kann verwendet werden, um die Eingabezeichenfolge in ein Array von Zeichenfolgen aufzuteilen.
  • Abgleich mit einer Schleife:Sie können eine Schleife verwenden, um den regulären Ausdruck mithilfe von wiederholt auf die Eingabezeichenfolge anzuwenden exec-Methode. Diese Methode gibt ein Array zurück, das alle erfassten Gruppen für jede Übereinstimmung enthält.
  • Mehrstufiger Abgleich: Ein anderer Ansatz besteht darin, die wiederholte Gruppe in einer Übereinstimmung zu erfassen und dann einen zweiten regulären Ausdruck zu verwenden, um diese zu unterbrechen match auseinander.

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' ]
Nach dem Login kopieren

Zusätzliche Ressourcen

  • regular-expressions.info/Repeating a Capturing Group vs. Capturing a Repeating Group
  • Wie greifen Sie auf die übereinstimmenden Gruppen in einem Javascript-Regex zu?

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage