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

regex
(?<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:

Alle Namen müssen innerhalb desselben Musters einzigartig sein. Mehrere benannte Erfassungsgruppen mit demselben Namen führen zu einem Syntaxfehler.

js
/(?<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.

js
/(?<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.

js
/(?<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):

js
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

Siehe auch