Benannte Erfassungsgruppe: (?<name>...)
Baseline
Weitgehend verfügbar
*
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2020 browserübergreifend verfügbar.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
Eine benannte Erfassungsgruppe ist eine besondere Art von Erfassungsgruppe, der Sie einen Namen geben können. Das Übereinstimmungsergebnis der Gruppe lässt sich später über diesen Namen statt über ihren Index im Muster identifizieren.
Syntax
(?<name>pattern)
Parameter
pattern-
Ein Muster, das aus allem bestehen kann, was in einem Literal für reguläre Ausdrücke zulässig ist, einschließlich einer Disjunktion.
name-
Der Name der Gruppe. Muss ein gültiger Bezeichner sein.
Beschreibung
Benannte Erfassungsgruppen können wie andere Erfassungsgruppen verwendet werden: Sie haben ebenfalls einen Übereinstimmungsindex im Ergebnisarray und können über \1, \2 usw. referenziert werden. Der einzige Unterschied besteht darin, dass sie zusätzlich über ihren Namen referenziert werden können. Auf die Informationen zur Übereinstimmung einer Erfassungsgruppe können Sie wie folgt zugreifen:
- Über die Eigenschaft
groupsdes Rückgabewerts vonRegExp.prototype.exec(),String.prototype.match()undString.prototype.matchAll() - Über den Parameter
groupsderreplacement-Callback-Funktion der MethodenString.prototype.replace()undString.prototype.replaceAll() - Über benannte Rückverweise innerhalb desselben Musters
Alle Namen müssen innerhalb desselben Musters eindeutig sein. Mehrere benannte Erfassungsgruppen mit demselben Namen führen zu einem Syntaxfehler.
/(?<name>)(?<name>)/; // SyntaxError: Invalid regular expression: Duplicate capture group name
Diese Einschränkung gilt nicht, wenn sich die benannten Erfassungsgruppen mit demselben Namen in unterschiedlichen Disjunktionsalternativen befinden, sodass für jede Eingabezeichenfolge tatsächlich nur eine benannte Erfassungsgruppe eine Übereinstimmung erzielen kann. Diese Funktion ist deutlich neuer. Prüfen Sie daher vor ihrer Verwendung die Browser-Kompatibilität.
/(?<year>\d{4})-\d{2}|\d{2}-(?<year>\d{4})/;
// Works; "year" can either come before or after the hyphen
Alle benannten Erfassungsgruppen sind im Ergebnis vorhanden. Wenn für eine benannte Erfassungsgruppe keine Übereinstimmung gefunden wird (beispielsweise weil sie zu einer nicht übereinstimmenden Alternative in einer Disjunktion gehört), hat die entsprechende Eigenschaft des groups-Objekts den Wert undefined.
/(?<ab>ab)|(?<cd>cd)/.exec("cd").groups; // [Object: null prototype] { ab: undefined, cd: 'cd' }
Mit dem Flag d können Sie den Anfangs- und Endindex jeder benannten Erfassungsgruppe in der Eingabezeichenfolge ermitteln. Neben dem Zugriff über die Eigenschaft indices des von exec() zurückgegebenen Arrays können Sie über indices.groups auch anhand der Namen darauf zugreifen.
Gegenüber unbenannten Erfassungsgruppen haben benannte Erfassungsgruppen folgende Vorteile:
- Sie können jedem Ergebnis einer Teilübereinstimmung einen aussagekräftigen Namen geben.
- Sie können auf die Ergebnisse von Teilübereinstimmungen zugreifen, ohne sich deren Reihenfolge im Muster merken zu müssen.
- Bei der Umstrukturierung von Code können Sie die Reihenfolge der Erfassungsgruppen ändern, ohne befürchten zu müssen, dass andere Referenzen dadurch ungültig werden.
Beispiele
>Benannte Erfassungsgruppen verwenden
Das folgende Beispiel liest einen Zeitstempel und den Namen eines Autors aus einem Git-Protokolleintrag aus (ausgegeben mit git log --format=%ct,%an -- filename):
function parseLog(entry) {
const { author, timestamp } = /^(?<timestamp>\d+),(?<author>.+)$/.exec(
entry,
).groups;
return `${author} committed on ${new Date(
parseInt(timestamp, 10) * 1000,
).toLocaleString()}`;
}
parseLog("1560979912,Caroline"); // "Caroline committed on 6/19/2019, 5:31:52 PM"
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # prod-Atom> |