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
Barbara StreisandOriginal
2024-12-26 13:08:14177Durchsuche

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)

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|$)/

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|$)/

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"

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

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!

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