Named capturing group: (?<name>...)
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Ein benannter Erfassungsgruppe ist eine besondere Art von Erfassungsgruppe, die es ermöglicht, der Gruppe einen Namen zu geben. Das Übereinstimmungsergebnis der Gruppe kann später durch diesen Namen statt durch seinen Index im Muster identifiziert werden.
Syntax
(?<name>pattern)
Parameter
pattern
-
Ein Muster, das alles enthalten kann, was in einem Regex-Literal verwendet werden darf, einschließlich einer Disjunktion.
name
-
Der Name der Gruppe. Muss ein gültiger Bezeichner sein.
Beschreibung
Benannte Erfassungsgruppen können wie normale Erfassungsgruppen verwendet werden — sie haben ebenfalls ihren Übereinstimmungsindex im Ergebnisarray und können durch \1
, \2
, etc. referenziert werden. Der einzige Unterschied besteht darin, dass sie zusätzlich durch ihren Namen referenziert werden können. Die Informationen über die Übereinstimmung der Erfassungsgruppe können abgerufen werden durch:
- Die
groups
-Eigenschaft des Rückgabewerts vonRegExp.prototype.exec()
,String.prototype.match()
undString.prototype.matchAll()
- Der
groups
-Parameter derreplacement
-Callbackfunktion der MethodenString.prototype.replace()
undString.prototype.replaceAll()
- Benannte Rückverweise im gleichen Muster
Alle Namen müssen innerhalb desselben Musters einzigartig 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 wird gelockert, wenn die doppelten benannten Erfassungsgruppen nicht in derselben Disjunktionsalternative sind, so dass für jede Zeichenketteingabe tatsächlich nur eine benannte Erfassungsgruppe abgeglichen werden kann. Dies ist ein viel neueres Feature, prüfen Sie also die Browser-Kompatibilität, bevor Sie es verwenden.
/(?<year>\d{4})-\d{2}|\d{2}-(?<year>\d{4})/;
// Works; "year" can either come before or after the hyphen
Benannte Erfassungsgruppen werden alle im Ergebnis vorhanden sein. Wenn eine benannte Erfassungsgruppe nicht abgeglichen wird (zum Beispiel gehört sie zu einer nicht abgeglichenen Alternative in einer Disjunktion), hat die entsprechende Eigenschaft im groups
-Objekt den Wert undefined
.
/(?<ab>ab)|(?<cd>cd)/.exec("cd").groups; // [Object: null prototype] { ab: undefined, cd: 'cd' }
Sie können die Start- und Endindizes jeder benannten Erfassungsgruppe im Eingabestring abrufen, indem Sie das d
-Flag verwenden. Zusätzlich zu ihrem Zugriff über die indices
-Eigenschaft des von exec()
zurückgegebenen Arrays, können Sie auch über indices.groups
auf sie nach ihren Namen zugreifen.
Im Vergleich zu unbenannten Erfassungsgruppen bieten benannte Erfassungsgruppen folgende Vorteile:
- Sie erlauben es, jedem Teilübereinstimmungsergebnis einen beschreibenden Namen zu geben.
- Sie ermöglichen den Zugriff auf Teilübereinstimmungsergebnisse, ohne sich die Reihenfolge merken zu müssen, in der sie im Muster erscheinen.
- Beim Umstrukturieren von Code können Sie die Reihenfolge der Erfassungsgruppen ändern, ohne sich Sorgen machen zu müssen, andere Verweise zu unterbrechen.
Beispiele
Verwenden benannter Erfassungsgruppen
Das folgende Beispiel analysiert einen Zeitstempel und einen Autorennamen aus einem Git-Log-Eintrag (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) * 1000,
).toLocaleString()}`;
}
parseLog("1560979912,Caroline"); // "Caroline committed on 6/19/2019, 5:31:52 PM"
Spezifikationen
Specification |
---|
ECMAScript Language Specification # prod-Atom |
Browser-Kompatibilität
BCD tables only load in the browser