Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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, die es Ihnen ermöglicht, der Gruppe einen Namen zu geben. Das Abgleichsergebnis der Gruppe kann später durch diesen Namen identifiziert werden, anstatt durch seinen Index im Muster.

Syntax

regex
(?<name>pattern)

Parameter

pattern

Ein Muster, das alles enthalten kann, das Sie in einem Regex-Literal verwenden können, einschließlich einer Disjunktion.

name

Der Name der Gruppe. Muss ein gültiger Bezeichner sein.

Beschreibung

Benannte Erfassungsgruppen können genauso wie Erfassungsgruppen verwendet werden - sie haben ebenfalls ihren Abgleichsindex im Ergebnisarray und können durch \1, \2 usw. referenziert werden. Der einzige Unterschied ist, dass sie zusätzlich durch ihren Namen referenziert werden können. Die Informationen des Abgleichs der Erfassungsgruppe können abgerufen werden durch:

Alle Namen müssen einzigartig innerhalb desselben Musters 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 nur eine benannte Erfassungsgruppe tatsächlich abgeglichen werden kann. Dies ist ein viel neueres Feature, daher überprüfen Sie bitte 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 (beispielsweise 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 in der Eingabestring mit dem d Flag erhalten. Zusätzlich zum Zugriff auf diese über die indices-Eigenschaft des Arrays, das von exec() zurückgegeben wird, können Sie auch über ihre Namen auf indices.groups darauf zugreifen.

Im Vergleich zu unbenannten Erfassungsgruppen bieten benannte Erfassungsgruppen folgende Vorteile:

  • Sie ermöglichen es Ihnen, jedem Teilergebniss einen beschreibenden Namen zu geben.
  • Sie ermöglichen den Zugriff auf Teilergebnisse, ohne sich an die Reihenfolge erinnern zu müssen, in der sie im Muster erscheinen.
  • Beim Refactoring von Code können Sie die Reihenfolge der Erfassungsgruppen ändern, ohne sich Sorgen machen zu müssen, andere Referenzen zu brechen.

Beispiele

Verwendung 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, 10) * 1000,
  ).toLocaleString()}`;
}

parseLog("1560979912,Caroline"); // "Caroline committed on 6/19/2019, 5:31:52 PM"

Spezifikationen

Spezifikation
ECMAScript® 2027 Language Specification
# prod-Atom

Browser-Kompatibilität

Siehe auch