Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
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 Januar 2020.
Die[Symbol.split]()-Methode vonRegExp-Instanzen spezifiziert, wieString.prototype.split funktionieren soll, wenn der reguläre Ausdruck als Trennzeichen übergeben wird.
In diesem Artikel
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
strDas Ziel der Teilungsoperation.
limitOptionalEin 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 daslimiterreicht oder der String nicht mehr demthis-Muster entspricht.
Rückgabewert
EinArray, das Teilstrings als seine Elemente enthält. Erfasste Gruppen sind enthalten.
Beschreibung
Diese Methode wird intern inString.prototype.split() aufgerufen, wenn einRegExp 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 vonsplit() inRegExp-Unterklassen anzupassen.
DieRegExp.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
lastIndexdennoch verschoben - wenn das RegexUnicode-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
limitParameter, 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 wieString.prototype.split(), außer dem unterschiedlichenthis und derunterschiedlichen 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 vonRegExp können die[Symbol.split]()-Methode überschreiben, umdas 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%> |