| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Regular_expressions/Capturing_group | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit Juli 2015 browserbergreifend verfgbar.
Eine Erfassungsgruppe gruppiert ein Teilmuster, sodass Sie einen Quantor auf die gesamte Gruppe anwenden oder Disjunktionen innerhalb davon verwenden knnen. Sie merkt sich Informationen ber das Teilmuster-Match, sodass Sie spter mit einem Backreference darauf zurckgreifen oder die Informationen ber die Match-Ergebnisse abrufen knnen.
Wenn Sie das Ergebnis des Teilmuster-Matches nicht bentigen, verwenden Sie stattdessen eine nicht erfassende Gruppe, was die Leistung verbessert und Refactoring-Gefahren vermeidet.
(pattern)
patternEin Muster, das alles enthalten kann, was Sie in einem Regex-Literal verwenden drfen, einschlielich einer Disjunktion.
Eine Erfassungsgruppe funktioniert wie der Gruppierungsoperator in JavaScript-Ausdrcken und ermglicht Ihnen, ein Teilmuster als einzelnes Atom zu verwenden.
Erfassungsgruppen werden in der Reihenfolge ihrer ffnenden Klammern nummeriert. Die erste Erfassungsgruppe wird mit 1 nummeriert, die zweite mit 2 und so weiter. Benannte Erfassungsgruppen sind ebenfalls Erfassungsgruppen und werden zusammen mit anderen (unnamede) Erfassungsgruppen nummeriert. Die Informationen des Erfassungsgruppen-Matches knnen abgerufen werden durch:
RegExp.prototype.exec(), String.prototype.match() und String.prototype.matchAll()pN-Parameter der replacement-Callback-Funktion der Methoden String.prototype.replace() und String.prototype.replaceAll()Hinweis:
Selbst im Ergebnis-Array von exec() werden Erfassungsgruppen durch die Nummern 1, 2 usw. abgerufen, da das 0-Element das gesamte Match ist. \0 ist kein Backreference, sondern eine Zeichenflucht fr das NUL-Zeichen.
Erfassungsgruppen im Regex-Quellcode entsprechen eins-zu-eins ihren Ergebnissen. Wenn eine Erfassungsgruppe nicht gematcht wird (zum Beispiel, wenn sie zu einer nicht passenden Alternative in einer Disjunktion gehrt), ist das entsprechende Ergebnis undefined.
/(ab)|(cd)/.exec("cd"); // ['cd', undefined, 'cd']
Erfassungsgruppen knnen quantifiziert werden. In diesem Fall sind die Match-Informationen, die dieser Gruppe entsprechen, das letzte Match der Gruppe.
/([ab])+/.exec("abc"); // ['ab', 'b']; because "b" comes after "a", this result overwrites the previous one
Erfassungsgruppen knnen in Lookahead und Lookbehind Assertionen verwendet werden. Da Lookbehind-Assertionen ihre Atome rckwrts matchen, ist das endgltige Match, das dieser Gruppe entspricht, dasjenige, das am linken Ende des Strings erscheint. Die Indizes der Match-Gruppen entsprechen jedoch immer noch ihren relativen Positionen im Regex-Quellcode.
/c(?=(ab))/.exec("cab"); // ['c', 'ab']
/(?<=(a)(b))c/.exec("abc"); // ['c', 'a', 'b']
/(?<=([ab])+)c/.exec("abc"); // ['c', 'a']; because "a" is seen by the lookbehind after the lookbehind has seen "b"
Erfassungsgruppen knnen verschachtelt sein, wobei die uere Gruppe zuerst nummeriert wird und dann die innere Gruppe, da sie durch ihre ffnenden Klammern angeordnet sind. Wenn eine verschachtelte Gruppe durch einen Quantor wiederholt wird, werden jedes Mal, wenn die Gruppe matcht, die Ergebnisse der Untergruppen alle berschrieben, manchmal mit undefined.
/((a+)?(b+)?(c))*/.exec("aacbbbcac"); // ['aacbbbcac', 'ac', 'a', undefined, 'c']
Im obigen Beispiel wird die uere Gruppe dreimal gematcht:
"aac", mit Untergruppen "aa", undefined und "c"."bbbc", mit Untergruppen undefined, "bbb" und "c"."ac", mit Untergruppen "a", undefined und "c".Das Ergebnis "bbb" des zweiten Matches bleibt nicht erhalten, da es durch das dritte Match mit undefined berschrieben wird.
Sie knnen die Start- und Endindizes jeder Erfassungsgruppe im Eingabestring erhalten, indem Sie das d Flag verwenden. Dies erzeugt eine zustzliche indices Eigenschaft auf dem Array, das von exec() zurckgegeben wird.
Sie knnen optional einer Erfassungsgruppe einen Namen zuweisen, der hilft, Fallstricke in Bezug auf Gruppenpositionen und Indizierung zu vermeiden. Siehe Benannte Erfassungsgruppen fr weitere Informationen.
Klammern haben in verschiedenen Regex-Syntaxen andere Zwecke. Zum Beispiel umschlieen sie auch Lookahead- und Lookbehind-Assertionen. Da diese Syntaxen alle mit ? beginnen und ? ein Quantor ist, der normalerweise nicht direkt nach ( auftreten kann, fhrt dies nicht zu Mehrdeutigkeiten.
Das folgende Beispiel matcht ein Datum im Format YYYY-MM-DD:
function parseDate(input) {
const parts = /^(\d{4})-(\d{2})-(\d{2})$/.exec(input);
if (!parts) {
return null;
}
return parts.slice(1).map((p) => parseInt(p, 10));
}
parseDate("2019-01-01"); // [2019, 1, 1]
parseDate("2019-06-19"); // [2019, 6, 19]
Die folgende Funktion matcht die Muster title='xxx' und title="xxx" in einem String. Um sicherzustellen, dass die Anfhrungszeichen bereinstimmen, verwenden wir ein Backreference, um auf das erste Anfhrungszeichen zu verweisen. Der Zugriff auf die zweite Erfassungsgruppe ([2]) gibt den String zwischen den bereinstimmenden Anfhrungszeichen zurck:
function parseTitle(metastring) {
return metastring.match(/title=(["'])(.*?)\1/)[2];
}
parseTitle('title="foo"'); // 'foo'
parseTitle("title='foo' lang='en'"); // 'foo'
parseTitle('title="Named capturing groups\' advantages"'); // "Named capturing groups' advantages"
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # prod-Atom |
(?:...)(?<name>...)\1, \2Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |