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 Methode [Symbol.split]()
von RegExp
-Instanzen legt fest, wie String.prototype.split
sich verhalten 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 Split-Operation.
limit
Optional-
Ganzzahl, die eine Begrenzung der Anzahl der zu findenden Splits angibt. Die Methode
[Symbol.split]()
teilt dennoch bei jeder Übereinstimmung des Mustersthis
(regexp
im obigen Syntax), bis die Anzahl der geteilten Elemente demlimit
entspricht oder der String nicht mehr mit dem Musterthis
übereinstimmt.
Rückgabewert
Ein Array
, das Teilstrings als Elemente enthält. Erfassungsgruppen 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 zu ändern.
Die Basis-Methode RegExp.prototype[Symbol.split]()
weist die folgenden Verhaltensweisen auf:
- Sie beginnt, indem sie
[Symbol.species]
verwendet, um ein neues RegExp zu erstellen, wodurch vermieden wird, dass das ursprüngliche RegExp in irgendeiner Weise verändert wird. - Das
g
-Flag ("global") des RegExps wird ignoriert, und dasy
-Flag ("sticky") wird immer angewendet, auch 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. Ansonsten, wenn das RegExp keinen leeren String abgleichen kann, wird[""]
zurückgegeben. - Das Matching erfolgt durch kontinuierliches Aufrufen von
this.exec()
. Da das RegExp immer sticky ist, bewegt es sich entlang des Strings und liefert jedes Mal einen übereinstimmenden String, einen Index und alle Erfassungsgruppen. - Für jeden Match wird zuerst der Teilstring zwischen dem Ende des letzten übereinstimmenden Strings und dem Anfang des aktuellen übereinstimmenden Strings dem Ergebnis-Array hinzugefügt. Danach werden die Werte der Erfassungsgruppen einzeln angehängt.
- Wenn der aktuelle Match ein leerer String ist oder wenn das RegExp an der aktuellen Position (da es sticky ist) nicht übereinstimmt, würde
lastIndex
dennoch weitergeschoben — wenn das RegExp Unicode-bewusst ist, würde es um einen Unicode-Codepunkt verschoben; andernfalls erhöht es um ein UTF-16 Code-Einheit. - Wenn das RegExp nicht mit dem Zielstring übereinstimmt, wird der Zielstring unverändert als Array zurückgegeben.
- Die Länge des zurückgegebenen Arrays wird niemals den übergebenen
limit
-Parameter überschreiten, falls vorhanden, während versucht wird, so nah wie möglich heranzukommen. Daher können der letzte Match und seine Erfassungsgruppen möglicherweise nicht vollständig im zurückgegebenen Array vorhanden sein, wenn das Array bereits voll ist.
Beispiele
Direkter Aufruf
Diese Methode kann fast auf die gleiche Weise wie String.prototype.split()
verwendet werden, außer dem unterschiedlichen this
und der anderen Anordnung 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 Methode [Symbol.split]()
überschreiben, um das Standardverhalten zu ä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% |