RegExp[Symbol.species]

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.

Die statische Zugriffs-Eigenschaft RegExp[Symbol.species] gibt den Konstruktor zurück, der verwendet wird, um kopierte reguläre Ausdrücke innerhalb bestimmter RegExp-Methoden zu erstellen.

Warnung: Die Existenz von [Symbol.species] ermöglicht die Ausführung von beliebigem Code und kann Sicherheitslücken schaffen. Sie erschwert auch bestimmte Optimierungen erheblich. Die Entwickler von JavaScript-Engines untersuchen, ob diese Funktion entfernt werden sollte. Vermeiden Sie es, sich nach Möglichkeit darauf zu verlassen.

Probieren Sie es aus

class MyRegExp extends RegExp {
  // Overwrite MyRegExp species to the parent RegExp constructor
  static get [Symbol.species]() {
    return RegExp;
  }
}

const regex1 = new MyRegExp("foo", "g");

console.log(regex1.test("football"));
// Expected output: true

Syntax

js
RegExp[Symbol.species]

Rückgabewert

Der Wert des Konstruktors (this), auf dem get [Symbol.species] aufgerufen wurde. Der Rückgabewert wird verwendet, um kopierte RegExp-Instanzen zu erstellen.

Beschreibung

Die [Symbol.species]-Zugriffs-Eigenschaft gibt den Standard-Konstruktor für RegExp-Objekte zurück. Konstruktoren von Unterklassen können diese überschreiben, um die Zuweisung des Konstruktors zu ändern. Die Standard-Implementierung ist im Wesentlichen:

js
// Hypothetical underlying implementation for illustration
class RegExp {
  static get [Symbol.species]() {
    return this;
  }
}

Aufgrund dieser polymorphen Implementierung würde [Symbol.species] von abgeleiteten Unterklassen standardmäßig ebenfalls den Konstruktor selbst zurückgeben.

js
class SubRegExp extends SubRegExp {}
SubRegExp[Symbol.species] === SubRegExp; // true

Einige RegExp-Methoden erstellen vor der Ausführung von exec() eine Kopie der aktuellen Regex-Instanz, damit Nebeneffekte wie Änderungen an lastIndex nicht beibehalten werden. Die [Symbol.species]-Eigenschaft wird verwendet, um den Konstruktor der neuen Instanz zu bestimmen. Die Methoden, die die aktuelle Regex-Instanz kopieren, sind:

Beispiele

Species in normalen Objekten

Die [Symbol.species]-Eigenschaft gibt die Standardkonstruktionsfunktion zurück, welche der RegExp-Konstruktor für RegExp-Objekte ist:

js
RegExp[Symbol.species]; // function RegExp()

Species in abgeleiteten Objekten

In einer Instanz einer benutzerdefinierten RegExp-Unterklasse, wie etwa MyRegExp, ist die MyRegExp-Species der MyRegExp-Konstruktor. Sie könnten jedoch möchten, dies zu überschreiben, um Eltern-RegExp-Objekte in den Methoden Ihrer abgeleiteten Klasse zurückzugeben:

js
class MyRegExp extends RegExp {
  // Overwrite MyRegExp species to the parent RegExp constructor
  static get [Symbol.species]() {
    return RegExp;
  }
}

Oder Sie können dies nutzen, um den Kopiervorgang zu beobachten:

js
class MyRegExp extends RegExp {
  constructor(...args) {
    console.log("Creating a new MyRegExp instance with args:", args);
    super(...args);
  }
  static get [Symbol.species]() {
    console.log("Copying MyRegExp");
    return this;
  }
  exec(value) {
    console.log("Executing with lastIndex:", this.lastIndex);
    return super.exec(value);
  }
}

Array.from("aabbccdd".matchAll(new MyRegExp("[ac]", "g")));
// Creating a new MyRegExp instance with args: [ '[ac]', 'g' ]
// Copying MyRegExp
// Creating a new MyRegExp instance with args: [ MyRegExp /[ac]/g, 'g' ]
// Executing with lastIndex: 0
// Executing with lastIndex: 1
// Executing with lastIndex: 2
// Executing with lastIndex: 5
// Executing with lastIndex: 6

Spezifikationen

Specification
ECMAScript® 2025 Language Specification
# sec-get-regexp-%symbol.species%

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
[Symbol.species]

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Siehe auch