Signatur
Beschreibung
RegExp.rightContext ist eine statische Eigenschaft des RegExp-Konstruktors, die nur gelesen werden kann. Sie enthält den Teil des Eingabestrings, der hinter der zuletzt gefundenen Übereinstimmung steht. Der Kurzname $' ist kein gültiger Bezeichner, deshalb greift man nur mit eckigen Klammern darauf zu: RegExp["$'"].
Der Wert wird bei jeder erfolgreichen Suche mit einem regulären Ausdruck global neu gesetzt, zum Beispiel durch RegExp.prototype.exec(), RegExp.prototype.test(), String.prototype.match() oder String.prototype.replace(). Das Gegenstück ist RegExp.leftContext ($`). Es liefert den Text vor der Übereinstimmung.
Die Eigenschaft gehört zu den veralteten Legacy-Features aus Annex B der Spezifikation. Verwende sie in neuem Code nicht. Den Rest nach einem Treffer bekommst du sauberer über das Ergebnis von exec() oder match(): str.slice(m.index + m[0].length). In Ersetzungsstrings von replace() gibt es außerdem das Muster $'. Das ist ein eigenes, nicht veraltetes Sprachmittel.
Rückgabewert
"".Beispiele
Grundlegende Nutzung nach exec()
const re = /hallo/g;
re.exec("hallo welt, hallo JS");
console.log(RegExp.rightContext);
console.log(RegExp["$'"]);
Rest nach einem Schlüssel auslesen (Legacy) und moderne Alternative
const zeile = "Content-Type: text/html; charset=utf-8";
// Legacy: über die globale Eigenschaft
if (/:\s*/.test(zeile)) {
console.log(RegExp.rightContext);
}
// Modern: aus dem Match-Ergebnis berechnen
const m = zeile.match(/:\s*/);
const rest = m ? zeile.slice(m.index + m[0].length) : "";
console.log(rest);
Wert wird durch die nächste Suche überschrieben
/b/.test("abc");
const ersterRest = RegExp.rightContext;
// Diese Suche überschreibt den Wert
/x/.test("xyz");
console.log(ersterRest);
console.log(RegExp.rightContext);
Ersetzungsmuster $' in replace() (nicht veraltet)
const text = "A-B";
// $' fügt den Text nach dem Treffer ein
console.log(text.replace("-", "[$']"));
// Wichtig · Fallstricke
- Veraltet: Die Eigenschaft gehört zu den Legacy-RegExp-Features. Sie ist nur aus Kompatibilitätsgründen in allen Browsern und in Node.js vorhanden. Verlass dich in neuem Code nicht darauf.
- Globaler Zustand: Jede erfolgreiche Suche mit einem regulären Ausdruck überschreibt den Wert, auch Suchen in Bibliotheken oder in asynchronen Callbacks. Das führt leicht zu schwer auffindbaren Fehlern.
- Subklassen: Nach dem Vorschlag „Legacy RegExp features“ wirft der Zugriff einen
TypeError, wenn der letzte Treffer von einerRegExp-Unterklasse oder einem anderen Realm stammt. Das Verhalten kann je nach Engine abweichen. - Syntax:
RegExp.$'ist ein Syntaxfehler. NurRegExp["$'"]funktioniert. - Performance: Engines müssen diesen globalen Zustand verwalten. Das kann Optimierungen bei regulären Ausdrücken behindern.