Start · Sprachen · JavaScript · Referenz · RegExp.rightContext ($')

RegExp.rightContext ($')

Eigenschaft

Die statische, veraltete Eigenschaft <code>RegExp.rightContext</code> (Alias <code>RegExp["$'"]</code>) liefert den Teilstring nach der letzten erfolgreichen Übereinstimmung.

seit JavaScript ES2015 (Annex B, Legacy-Feature); Baseline: alle B deprecated seit ja Kategorie: method-property

Signatur

get RegExp.rightContext / RegExp["$'"]

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

Typ
string
Beschreibung
Der Teilstring nach der letzten erfolgreichen Übereinstimmung. Gab es noch keinen Treffer, ist er ein leerer String "".

Beispiele

Grundlegende Nutzung nach exec()

const re = /hallo/g;
re.exec("hallo welt, hallo JS");

console.log(RegExp.rightContext);
console.log(RegExp["$'"]);
" welt, hallo JS" " welt, hallo JS"

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);
text/html; charset=utf-8 text/html; charset=utf-8

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);
"c" "yz"

Ersetzungsmuster $' in replace() (nicht veraltet)

const text = "A-B";
// $' fügt den Text nach dem Treffer ein
console.log(text.replace("-", "[$']"));
"A[B]B"

// 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 einer RegExp-Unterklasse oder einem anderen Realm stammt. Das Verhalten kann je nach Engine abweichen.
  • Syntax: RegExp.$' ist ein Syntaxfehler. Nur RegExp["$'"] funktioniert.
  • Performance: Engines müssen diesen globalen Zustand verwalten. Das kann Optimierungen bei regulären Ausdrücken behindern.