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 Ergebnis 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 alles enthalten kann, was in einem Regex-Literal zulässig ist, einschließlich einer Disjunktion.
name-
Der Name der Gruppe. Er muss ein gültiger Bezeichner sein.
Beschreibung
Benannte Erfassungsgruppen können wie andere Erfassungsgruppen verwendet werden: Auch sie haben einen Übereinstimmungsindex im Ergebnisarray und können über \1, \2 usw. referenziert werden. Zusätzlich können Sie über ihren Namen auf sie zugreifen. Die Informationen zur Übereinstimmung einer Erfassungsgruppe sind über Folgendes zugänglich:
- Die Eigenschaft
groupsdes Rückgabewerts vonRegExp.prototype.exec()oder vonString.prototype.match(), wenn der reguläre Ausdruck nicht das Flagghat - Die Eigenschaft
groupsjedes Übereinstimmungsarrays, das der vonString.prototype.matchAll()zurückgegebene Iterator liefert - Den Parameter
groupsder Callback-Funktionreplacementder MethodenString.prototype.replace()undString.prototype.replaceAll() - Benannte Rückverweise innerhalb desselben Musters
Alle Namen innerhalb eines Musters müssen 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 gleichnamigen benannten Erfassungsgruppen in unterschiedlichen Alternativen einer Disjunktion befinden. Dadurch kann bei jeder Eingabezeichenfolge tatsächlich nur eine benannte Erfassungsgruppe dieses Namens übereinstimmen. 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 eine benannte Erfassungsgruppe keine Übereinstimmung erzielt (etwa weil sie zu einer nicht übereinstimmenden Alternative einer Disjunktion gehört), hat die entsprechende Eigenschaft des Objekts groups den Wert undefined.
/(?<ab>ab)|(?<cd>cd)/.exec("cd").groups; // [Object: null prototype] { ab: undefined, cd: 'cd' }
Mit dem Flag d können Sie die Start- und Endindizes jeder benannten Erfassungsgruppe in der Eingabezeichenfolge ermitteln. Sie können nicht nur über die Eigenschaft indices des von exec() zurückgegebenen Arrays darauf zugreifen, sondern auch über die jeweiligen Namen unter indices.groups.
Gegenüber unbenannten Erfassungsgruppen haben benannte Erfassungsgruppen folgende Vorteile:
- Sie können jedem Teilergebnis einen aussagekräftigen Namen geben.
- Sie können auf Teilergebnisse zugreifen, ohne sich die Reihenfolge der Gruppen im Muster merken zu müssen.
- Bei einer Umstrukturierung des Codes können Sie die Reihenfolge der Erfassungsgruppen ändern, ohne befürchten zu müssen, dass andere Verweise dadurch nicht mehr funktionieren.
Beispiele
>Benannte Erfassungsgruppen verwenden
Das folgende Beispiel liest einen Zeitstempel und einen Autornamen aus einem Git-Protokolleintrag aus (Ausgabe 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> |