Signatur
Beschreibung
RegExp.lastParen ist eine statische Zugriffs-Eigenschaft des globalen RegExp-Konstruktors. Sie gehört also nicht zu einer einzelnen Regex-Instanz. Nach jedem erfolgreichen Treffer, etwa durch exec(), test(), String.prototype.match() oder replace(), speichert die JavaScript-Engine dort den Inhalt der letzten Erfassungsgruppe. Gemeint ist die Gruppe mit der höchsten Nummer, nicht die Gruppe, die zeitlich zuletzt gepasst hat.
Die Eigenschaft hat den Alias RegExp["$+"]. Weil + in einem Bezeichner nicht erlaubt ist, funktioniert hier nur die Klammer-Schreibweise. RegExp.$+ ist ein Syntaxfehler.
Hat der Ausdruck keine Erfassungsgruppen oder hat die letzte Gruppe beim Treffer nicht mitgewirkt, ist der Wert ein leerer String "". Ein fehlgeschlagener Treffer lässt den vorherigen Wert unverändert.
Die Eigenschaft stammt aus den frühen Tagen von JavaScript und ist veraltet. Sie beruht auf globalem, veränderlichem Zustand. Im modernen Code greift man stattdessen direkt auf das Ergebnis-Array von exec() bzw. match() zu, zum Beispiel mit match.at(-1), oder man verwendet benannte Gruppen (match.groups).
Rückgabewert
"".Beispiele
Letzte Gruppe nach einem Treffer auslesen
const re = /(\w+)\s(\w+)/;
re.test("Max Mustermann");
console.log(RegExp.lastParen);
console.log(RegExp["$+"]); // Alias, nur in Klammer-Schreibweise
Nicht beteiligte letzte Gruppe und Ausdruck ohne Gruppen
// Gruppe 2 wirkt nicht mit, deshalb ist das Ergebnis leer
/(a)|(b)/.exec("a");
console.log(JSON.stringify(RegExp.lastParen));
// Ausdruck ohne Erfassungsgruppen
/\d+/.exec("Version 42");
console.log(JSON.stringify(RegExp.lastParen));
Fallstrick: globaler Zustand wird überschrieben
const parseDatum = (s) => {
/(\d{2})\.(\d{2})\.(\d{4})/.test(s);
logge("Datum geprüft"); // führt intern selbst einen Treffer aus
return RegExp.lastParen; // gedacht war das Jahr
};
const logge = (msg) => {
/(\w+)/.test(msg); // überschreibt RegExp.lastParen
};
console.log(parseDatum("24.12.2024"));
Moderne Alternative ohne globalen Zustand
const re = /(?<tag>\d{2})\.(?<monat>\d{2})\.(?<jahr>\d{4})/;
const m = re.exec("24.12.2024");
if (m) {
console.log(m.at(-1)); // letzte Gruppe über das Ergebnis-Array
console.log(m.groups.jahr); // benannte Gruppe
}
// Wichtig · Fallstricke
- Veraltet: Die Eigenschaft ist nicht Teil des eigentlichen ECMAScript-Standards. Sie wird nur im Proposal „Legacy RegExp features“ beschrieben. Browser und Node.js unterstützen sie aus Kompatibilitätsgründen, in neuem Code sollte man sie aber nicht verwenden.
- Globaler Zustand: Jeder erfolgreiche Treffer im selben Realm überschreibt den Wert, auch Treffer in Bibliotheken, Hilfsfunktionen oder nach einem
await. Der Wert ist deshalb leicht fehleranfällig und schwer nachzuvollziehen. - Nur Klammer-Schreibweise für den Alias:
RegExp["$+"]funktioniert,RegExp.$+ist ein Syntaxfehler. - „Letzte“ heißt „höchste Nummer“: Gemeint ist nicht die zuletzt passende Gruppe. Hat die höchste Gruppe nicht mitgewirkt, ist das Ergebnis
"", auch wenn eine frühere Gruppe gepasst hat. - Unterklassen: Laut Proposal aktualisieren nur Instanzen des eingebauten
RegExpdes jeweiligen Realms die Legacy-Eigenschaften. Nach Treffern mit Unterklassen vonRegExpkann der Zugriff einenTypeErrorauslösen. - Die Eigenschaft ist schreibgeschützt (nur ein Getter). Eine Zuweisung hat keine Wirkung und wirft im Strict Mode einen
TypeError.