Heim > Web-Frontend > js-Tutorial > Wie greife ich in regulären JavaScript-Ausdrücken korrekt auf übereinstimmende Gruppen zu?

Wie greife ich in regulären JavaScript-Ausdrücken korrekt auf übereinstimmende Gruppen zu?

Barbara Streisand
Freigeben: 2024-12-26 13:08:14
Original
124 Leute haben es durchsucht

How to Correctly Access Matched Groups in JavaScript Regular Expressions?

So greifen Sie auf übereinstimmende Gruppen in einem regulären JavaScript-Ausdruck zu

Der Zugriff auf die von einem regulären Ausdruck in JavaScript erfassten Untergruppen kann mit der Methode exec() erreicht werden. Diese Methode gibt ein Array-ähnliches Objekt zurück, das die durch den Ausdruck erzielten Übereinstimmungen enthält.

Betrachten Sie zur Veranschaulichung das folgende Beispiel:

var myString = "something format_abc"; // Obtain "abc"

const arr = /(?:^|\s)format_(.*?)(?:\s|$)/.exec(myString);

console.log(arr); // Outputs: [" format_abc", "abc"]
console.log(arr[1]); // Outputs: undefined (the issue)
console.log(arr[0]); // Outputs: format_undefined (another issue)
Nach dem Login kopieren

Die erwartete Ausgabe besteht darin, die Untergruppe „abc“ zu erhalten. als zweites Element des arr-Arrays. Der Zugriff auf arr[1] und arr[0] führt jedoch zu undefinierten bzw. falschen Werten.

Auflösen der undefinierten Ausgabe:

Das Fehlen eines Werts in arr[1] liegt an der .*? nicht gieriger Quantor, der im regulären Ausdruck verwendet wird. Dieser Quantifizierer erfasst die minimal mögliche Anzahl an Zeichen, was zur Zeichenfolge „format_abc“ ohne Trennzeichen führt.

Um dies zu beheben, verwenden Sie stattdessen einen gierigen Quantifizierer .*:

/(?:^|\s)format_(.*)(?:\s|$)/
Nach dem Login kopieren

Korrigieren der falschen Zeichenfolgenausgabe:

Das Problem mit arr[0] entsteht durch Verwendung der printf-ähnlichen Formatierung der Konsole. Das Sonderzeichen % im Format_%A hat versucht, den Wert des nächsten fehlenden Parameters zu ersetzen.

Um dies zu beheben, maskieren Sie das % im regulären Ausdruck:

/(?:^|\s)format_(.*?)(?:\s|$)/
Nach dem Login kopieren

Mit Durch diese Änderungen wird die korrekte Ausgabe erreicht:

[" format_abc", "abc"]
console.log(arr[1]); // Outputs: "abc"
console.log(arr[0]); // Outputs: " format_abc"
Nach dem Login kopieren

Zugriff auf übereinstimmende Gruppen über matchAll() (ECMAScript 2020 und Später):

Die Methode String.prototype.matchAll() bietet einen modernen und intuitiveren Ansatz zum Durchlaufen mehrerer Übereinstimmungen in einer Zeichenfolge. Es gibt einen Iterator zurück, der wie folgt verwendet werden kann:

const string = "something format_abc";
const regexp = /(?:^|\s)format_(.*?)(?:\s|$)/g;
const matches = string.matchAll(regexp);

for (const match of matches) {
  console.log(match);
  console.log(match.index);
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie greife ich in regulären JavaScript-Ausdrücken korrekt auf übereinstimmende Gruppen zu?. 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