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!