Heim  >  Artikel  >  Web-Frontend  >  Wie können Sie mehrere Gruppen in einem regulären JavaScript-Ausdruck erfassen, wenn bei der Wiederholung nur die letzte Übereinstimmung erhalten bleibt?

Wie können Sie mehrere Gruppen in einem regulären JavaScript-Ausdruck erfassen, wenn bei der Wiederholung nur die letzte Übereinstimmung erhalten bleibt?

DDD
DDDOriginal
2024-11-16 22:40:03648Durchsuche

How can you capture multiple groups in a JavaScript regexp when the repetition only keeps the last match?

Erfassen mehrerer Gruppen in JavaScript Regexp

Bei der Arbeit mit regulären Ausdrücken in JavaScript ist es möglich, mehrere Gruppen von Übereinstimmungen innerhalb einer Zeichenfolge zu erfassen . Allerdings gibt es Einschränkungen hinsichtlich der Anzahl der Gruppen, die erfasst und abgerufen werden können.

Bedenken Sie den folgenden JavaScript-Regexp:

"foo bar baz".match(/^(\s*\w+)+$/)

Man könnte erwarten, dass dieser Regexp ein Array zurückgibt, das das Ganze enthält string „foo bar baz“ sowie jedes einzelne Wort:

["foo bar baz", "foo", " bar", " baz"]

Der reguläre Ausdruck gibt jedoch tatsächlich nur die zuletzt erfasste Übereinstimmung zurück:

["foo bar baz", " baz"]

Dieses Verhalten tritt auf, weil in den meisten Bei Regexp-Varianten wird nur die letzte Erfassung für eine wiederholte Erfassungsgruppe beibehalten. In JavaScript ermöglicht die Wiederholung einer Erfassungsgruppe nur die Erfassung genau der angegebenen Anzahl von Zeichenfolgen pro Übereinstimmung.

Um diese Einschränkung zu überwinden, gibt es mehrere Optionen:

  • Aufteilung nach Trennzeichen: Erwägen Sie nach Möglichkeit die Aufteilung der Zeichenfolge auf das entsprechende Trennzeichen, anstatt einen regulären Ausdruck mit wiederholten Erfassungsgruppen zu verwenden.
  • Verwendung einer globalen Exec-Schleife: Passen Sie die wiederholte Gruppe an in einem Match mit dem Flag /pattern/g und verarbeiten Sie die Ergebnisse dann mithilfe einer Exec-Schleife. Beachten Sie, dass diese Methode nicht vollständig einer wiederholten Erfassungsgruppe entspricht.
  • Mehrstufiger Abgleich: Erfassen Sie die wiederholte Gruppe in einem Treffer und verwenden Sie dann einen zweiten regulären Ausdruck, um diesen Treffer aufzuteilen.

Beispiel:

Zur Übereinstimmung mit der Zeichenfolge in einem Text mit mehrstufigem Matching:

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(";"));
}

Dieser Ansatz verwendet zwei Matching-Ebenen, um einzelne Wörter aus der Zeichenfolge zu extrahieren.

Das obige ist der detaillierte Inhalt vonWie können Sie mehrere Gruppen in einem regulären JavaScript-Ausdruck erfassen, wenn bei der Wiederholung nur die letzte Übereinstimmung erhalten bleibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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