Backreference: \1, \2
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.
Eine Backreference bezieht sich auf die Teilübereinstimmung einer vorherigen Capture-Gruppe und entspricht demselben Text wie jene Gruppe. Für benannte Capture-Gruppen könnten Sie es vorziehen, die Syntax der benannten Backreference zu verwenden.
Syntax
\N
Note:
N
ist kein literales Zeichen.
Parameter
N
-
Eine positive ganze Zahl, die sich auf die Nummer einer Capture-Gruppe bezieht.
Beschreibung
Eine Backreference ist eine Möglichkeit, denselben Text erneut abzugleichen, der zuvor von einer Capture-Gruppe abgeglichen wurde. Capture-Gruppen werden ab 1 gezählt, sodass man auf das Ergebnis der ersten Capture-Gruppe mit \1
Bezug nehmen kann, auf die zweite mit \2
und so weiter. \0
ist ein Zeichenescape für das NUL-Zeichen.
Bei Groß-/Kleinschreibung ignorieren kann die Backreference Text mit anderer Groß-/Kleinschreibung als den ursprünglichen Text abgleichen.
/(b)\1/i.test("bB"); // true
Die Backreference muss sich auf eine existierende Capture-Gruppe beziehen. Wenn die angegebene Nummer größer ist als die Gesamtanzahl der Capture-Gruppen, wird ein Syntaxfehler ausgelöst.
/(a)\2/u; // SyntaxError: Invalid regular expression: Invalid escape
Im Unicode-unaware-Modus werden ungültige Backreferences zu einer veralteten oktalen Escapesequenz. Dies ist eine veraltete Syntax für Webkompatibilität, auf die Sie sich nicht verlassen sollten.
/(a)\2/.test("a\x02"); // true
Wenn die referenzierte Capture-Gruppe nicht übereinstimmt (zum Beispiel, weil sie zu einer nicht übereinstimmenden Alternative in einer Disjunktion gehört), oder die Gruppe noch nicht übereingestimmt hat (zum Beispiel, weil sie rechts von der Backreference liegt), wird die Backreference immer als erfolgreich betrachtet (als ob sie mit der leeren Zeichenkette übereinstimmt).
/(?:a|(b))\1c/.test("ac"); // true
/\1(a)/.test("a"); // true
Beispiele
Paarung von Anführungszeichen
Die folgende Funktion erkennt die Muster title='xxx'
und title="xxx"
in einem String. Um sicherzustellen, dass die Anführungszeichen übereinstimmen, verwenden wir eine Backreference, um auf das erste Anführungszeichen zu verweisen. Der Zugriff auf die zweite Capture-Gruppe ([2]
) gibt den String zwischen den übereinstimmenden Anführungszeichen zurück:
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"
Übereinstimmung von doppelten Wörtern
Die folgende Funktion findet doppelte Wörter in einem String (die normalerweise Tippfehler sind). Beachten Sie, dass sie die \w
Zeichenklassen-Escape verwendet, die nur englische Buchstaben, aber keine Akzentbuchstaben oder andere Alphabete abgleicht. Wenn Sie allgemeinere Übereinstimmungen wünschen, sollten Sie den String möglicherweise nach Leerzeichen splitten und über das resultierende Array iterieren.
function findDuplicates(text) {
return text.match(/\b(\w+)\s+\1\b/i)?.[1];
}
findDuplicates("foo foo bar"); // 'foo'
findDuplicates("foo bar foo"); // undefined
findDuplicates("Hello hello"); // 'Hello'
findDuplicates("Hello hellos"); // undefined
Spezifikationen
Specification |
---|
ECMAScript Language Specification # prod-DecimalEscape |
Browser-Kompatibilität
BCD tables only load in the browser