W3docs

Erfassungsgruppen

Erfassungsgruppen in JavaScript-Regulärausdrücken: nummerierte Gruppen, benannte Gruppen (?<name>), nicht erfassende Gruppen (?:) sowie match, matchAll und replace ($1, $<name>).

Eine Erfassungsgruppe ist ein in Klammern (...) eingeschlossener Teil eines regulären Ausdrucks. Sie erfüllt zwei Aufgaben: Sie fasst einen Teil des Musters zusammen, sodass Quantoren und Alternation auf den gesamten Abschnitt angewendet werden, und sie merkt sich den übereinstimmenden Text, damit er später ausgelesen werden kann.

Das verwandelt einen regulären Ausdruck von einem Ja/Nein-Test in ein Werkzeug zur Datenextraktion. Anstatt nur zu wissen, dass ein Datum übereinstimmt, können Sie Jahr, Monat und Tag als separate Teile herauslesen. Diese Seite behandelt nummerierte Gruppen, benannte Gruppen, nicht erfassende Gruppen sowie das Verhalten von Gruppen mit match, matchAll und replace.

Erfassungsgruppen verstehen

Wenn eine Übereinstimmung gefunden wird, wird die gesamte Übereinstimmung am Index 0 des Ergebnis-Arrays gespeichert, und jede Erfassungsgruppe wird bei den nächsten Indizes (1, 2, 3, …) in der Reihenfolge gespeichert, in der die öffnenden Klammern der Gruppen von links nach rechts erscheinen.

Syntax und grundlegende Verwendung

Hier ein einfaches Beispiel:

javascript— editable

match[0] ist immer der gesamte übereinstimmende string. match[1] und match[2] enthalten den Text, der von den ersten und zweiten Klammernpaaren erfasst wurde. Die Gruppen werden nach ihrer öffnenden ( nummeriert, sodass auch verschachtelte Gruppen eine vorhersehbare Reihenfolge haben (siehe unten).

Erweiterte Verwendung und Techniken

Verschachtelte Erfassungsgruppen

Gruppen können verschachtelt werden, was komplexeres Musterabgleichen ermöglicht. Die Nummerierung folgt jeder öffnenden Klammer von links nach rechts:

javascript— editable

Die äußere Gruppe (Gruppe 1) erfasst foobar, während die inneren Gruppen (2 und 3) foo und bar getrennt erfassen. Wenn eine Gruppe optional ist und nicht an der Übereinstimmung teilnimmt, ist ihr Slot undefined.

Nicht erfassende Gruppen

Manchmal möchten Sie Teile eines Musters gruppieren — um einen Quantor oder eine Alternation anzuwenden —, ohne dabei einen nummerierten Slot zu verbrauchen. Nicht erfassende Gruppen verwenden (?:...):

javascript— editable

Hier wird foo gruppiert, aber nicht erfasst, sodass bar Gruppe 1 statt Gruppe 2 wird. Nicht erfassende Gruppen halten Ihr Ergebnis-Array übersichtlich und sind etwas schneller, wenn Sie den übereinstimmenden Text nicht benötigen.

Eine häufige Verwendung besteht darin, einen Abschnitt zu wiederholen, ohne jede Wiederholung zu erfassen:

javascript— editable

Praktische Beispiele

Datumsangaben parsen

Erfassungsgruppen können Datumsangaben aus Strings parsen und neu formatieren:

javascript— editable

Dieser Code extrahiert Jahr, Monat und Tag und formatiert das Datum in einem anderen Stil.

Informationen aus URLs extrahieren

Ein weiterer häufiger Anwendungsfall ist das Extrahieren von Teilen einer URL:

javascript— editable

Dieser reguläre Ausdruck erfasst Protokoll, Domain, Pfad und Abfragestring separat.

Tipps für den effektiven Einsatz von Erfassungsgruppen

  1. Gruppen planen: Überlegen Sie im Voraus, welche Teile des Musters Sie erfassen müssen.
  2. Nicht erfassende Gruppen bei Bedarf verwenden: Nutzen Sie (?:...) für Gruppierungen ohne Erfassung, um Ihr Ergebnis-Array übersichtlich zu halten.
  3. Benannte Erfassungsgruppen: In modernem JavaScript (ES2018+) können Sie benannte Erfassungsgruppen für bessere Lesbarkeit verwenden.
  4. Verhalten mit dem g-Flag: Wenn Sie das g-Flag mit String.prototype.match() verwenden, wird ein array aller übereinstimmenden Strings zurückgegeben, ohne Erfassungsgruppen. Verwenden Sie String.prototype.matchAll() für eine detaillierte Gruppenextraktion mit dem globalen Flag.

Benannte Erfassungsgruppen

Nummerierte Gruppen sind fehleranfällig: Fügen Sie eine Gruppe in der Mitte ein, verschiebt sich jeder Index dahinter. Benannte Erfassungsgruppen (ES2018+) vermeiden dies, indem jede Gruppe mit (?<name>...) beschriftet wird. Die Erfassungen erscheinen auf einem groups-object statt (oder zusätzlich zu) nummerierten Indizes:

javascript— editable
Info

Bevorzugen Sie benannte Erfassungsgruppen für alles über ein triviales Muster hinaus — sie machen sowohl den regulären Ausdruck als auch den Code, der ihn liest, selbstdokumentierend.

Gruppen mit match, matchAll und replace verwenden

Wie erfasste Gruppen ausgelesen werden, hängt von der verwendeten Methode ab.

Ohne das g-Flag — match gibt Gruppen zurück

Ein nicht-globales String.prototype.match() gibt ein einzelnes Übereinstimmungs-array mit allen Gruppen zurück, genau wie in den obigen Beispielen. Dies ist die häufigste Methode, um einen einzelnen Datensatz zu extrahieren.

Mit dem g-Flag — matchAll für Gruppen verwenden

Wenn Sie das globale Flag g hinzufügen, gibt match() nur ein flaches array der vollständigen Übereinstimmungs-Strings zurück — die Gruppen gehen verloren. Um Gruppen für jede Übereinstimmung zu erhalten, verwenden Sie String.prototype.matchAll(), das einen Iterator von Übereinstimmungs-Arrays zurückgibt (jedes mit seinem eigenen groups-object):

javascript— editable

Auf Gruppen in replace verweisen

In einem Ersetzungsstring von String.prototype.replace() können Sie auf Erfassungen per Nummer mit $1, $2, … oder per Name mit $<name> verweisen:

javascript— editable

Für mehr Kontrolle übergeben Sie eine Funktion an replace. Ihre Argumente sind die vollständige Übereinstimmung, dann jede erfasste Gruppe und (bei Verwendung von Namen) ein abschließendes groups-object:

javascript— editable

Rückverweise

Sobald eine Gruppe Text erfasst hat, können Sie denselben Text später im selben Muster erneut abgleichen, indem Sie einen Rückverweis verwenden — \\1 für nummerierte Gruppen oder \\k<name> für benannte. Dies ist nützlich, um wiederholte Wörter zu finden oder paarweise Anführungszeichen abzugleichen:

javascript— editable

Rückverweise sind ein eigenes Thema — siehe Rückverweise im Muster für alle Details.

Verwandte Themen

Fazit

Erfassungsgruppen in JavaScript-Regulärausdrücken bieten eine robuste Möglichkeit, mit komplexen String-Mustern zu arbeiten. Wenn Sie ihren Einsatz beherrschen, können Sie anspruchsvolle Textmanipulationen durchführen, aussagekräftige Daten extrahieren und Ersetzungen mühelos handhaben. Ob Sie Datumsangaben parsen, URLs verarbeiten oder Strings neu formatieren — Erfassungsgruppen bieten die Flexibilität und Leistungsfähigkeit, die für fortgeschrittene Textverarbeitungsaufgaben benötigt werden. Erkunden Sie diese Beispiele, üben Sie mit Ihren eigenen Mustern und erweitern Sie Ihre JavaScript-Kenntnisse, um jede Herausforderung bei der String-Manipulation zu meistern.

Übungen

Übung
Welche der folgenden Aussagen über Erfassungsgruppen in JavaScript-Regulärausdrücken sind wahr?
Welche der folgenden Aussagen über Erfassungsgruppen in JavaScript-Regulärausdrücken sind wahr?
Was this page helpful?