RegExp.prototype[Symbol.split]()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
Die [Symbol.split]()
-Methode von RegExp
-Instanzen spezifiziert, wie String.prototype.split
funktionieren soll, wenn der reguläre Ausdruck als Trennzeichen übergeben wird.
Probieren Sie es aus
class RegExp1 extends RegExp {
[Symbol.split](str, limit) {
const result = RegExp.prototype[Symbol.split].call(this, str, limit);
return result.map((x) => `(${x})`);
}
}
console.log("2016-01-02".split(new RegExp1("-")));
// Expected output: Array ["(2016)", "(01)", "(02)"]
console.log("2016-01-02".split(/-/));
// Expected output: Array ["2016", "01", "02"]
Syntax
regexp[Symbol.split](str)
regexp[Symbol.split](str, limit)
Parameter
str
-
Das Ziel der Teilungsoperation.
limit
Optional-
Ein Integer, der ein Limit für die Anzahl an gefundener Teilungen angibt. Die
[Symbol.split]()
-Methode teilt weiterhin bei jedem Treffer desthis
-RegExp-Musters (oder, in der oben stehenden Syntax,regexp
), bis die Anzahl der Teilungselemente daslimit
erreicht oder der String nicht mehr demthis
-Muster entspricht.
Rückgabewert
Ein Array
, das Teilstrings als seine Elemente enthält. Erfasste Gruppen sind enthalten.
Beschreibung
Diese Methode wird intern in String.prototype.split()
aufgerufen, wenn ein RegExp
als Trennzeichen übergeben wird. Zum Beispiel liefern die folgenden beiden Beispiele das gleiche Ergebnis.
"a-b-c".split(/-/);
/-/[Symbol.split]("a-b-c");
Diese Methode existiert, um das Verhalten von split()
in RegExp
-Unterklassen anzupassen.
Die RegExp.prototype[Symbol.split]()
Basismethode zeigt die folgenden Verhaltensweisen:
- Sie beginnt, indem sie
[Symbol.species]
verwendet, um ein neues RegExp zu erstellen, wodurch verhindert wird, dass das ursprüngliche RegExp in irgendeiner Weise verändert wird. - Das
g
("global")-Flag des RegExp wird ignoriert, und dasy
("sticky")-Flag wird immer angewendet, selbst wenn es ursprünglich nicht vorhanden war. - Wenn der Zielstring leer ist und das RegExp leere Strings abgleichen kann (zum Beispiel
/a?/
), wird ein leeres Array zurückgegeben. Andernfalls wird, wenn das RegExp keinen leeren String abgleichen kann,[""]
zurückgegeben. - Die Übereinstimmung erfolgt, indem kontinuierlich
this.exec()
aufgerufen wird. Da das RegExp immer sticky ist, bewegt es sich entlang des Strings und liefert jedes Mal einen übereinstimmenden String, einen Index und alle erfassten Gruppen. - Für jede Übereinstimmung wird zunächst der Teilstring zwischen dem Ende des letzten übereinstimmenden Strings und dem Anfang des aktuell übereinstimmenden Strings dem Ergebnisarray hinzugefügt. Danach werden die Werte der erfassten Gruppen einzeln hinzugefügt.
- Wenn die aktuelle Übereinstimmung ein leerer String ist oder wenn das RegExp bei der aktuellen Position nicht übereinstimmt (da es sticky ist), wird der
lastIndex
dennoch verschoben - wenn das Regex Unicode-fähig ist, wird um einen Unicode-Codepunkt verschoben; andernfalls um eine UTF-16-Codeeinheit. - Wenn das RegExp nicht mit dem Zielstring übereinstimmt, wird der Zielstring unverändert in ein Array gewrappt zurückgegeben.
- Die Länge des zurückgegebenen Arrays übersteigt niemals den
limit
Parameter, falls angegeben, während versucht wird, so nah wie möglich zu sein. Daher können die letzte Übereinstimmung und ihre erfassten Gruppen möglicherweise nicht alle im zurückgegebenen Array enthalten sein, wenn das Array bereits gefüllt ist.
Beispiele
Direkter Aufruf
Diese Methode kann auf fast die gleiche Weise verwendet werden wie
String.prototype.split()
, außer dem unterschiedlichen this
und der
unterschiedlichen Reihenfolge der Argumente.
const re = /-/g;
const str = "2016-01-02";
const result = re[Symbol.split](str);
console.log(result); // ["2016", "01", "02"]
Verwendung von [Symbol.split]()
in Unterklassen
Unterklassen von RegExp
können die [Symbol.split]()
-Methode überschreiben, um
das Standardverhalten zu verändern.
class MyRegExp extends RegExp {
[Symbol.split](str, limit) {
const result = RegExp.prototype[Symbol.split].call(this, str, limit);
return result.map((x) => `(${x})`);
}
}
const re = new MyRegExp("-");
const str = "2016-01-02";
const result = str.split(re); // String.prototype.split calls re[Symbol.split]().
console.log(result); // ["(2016)", "(01)", "(02)"]
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-regexp.prototype-%symbol.split% |