Signatur
Beschreibung
Die Methode split() von String-Werten nimmt ein Muster entgegen und teilt diesen String in eine geordnete Liste von Teilstrings auf, indem sie nach dem Muster sucht, diese Teilstrings in ein Array einfügt und das Array zurückgibt.
Ist separator ein nicht-leerer String, wird der Ziel-String an allen Vorkommen des separator geteilt, ohne dass separator in die Ergebnisse eingeschlossen wird. Zum Beispiel könnte ein String mit tabulatorgetrennten Werten (TSV) durch Übergabe eines Tabulatorzeichens als Separator geparst werden, etwa myString.split("\t"). Enthält separator mehrere Zeichen, muss diese gesamte Zeichenfolge gefunden werden, damit geteilt wird. Erscheint separator am Anfang (oder Ende) des Strings, hat dies dennoch die Wirkung einer Teilung, sodass ein leerer (d.h. Länge null) String an der ersten (oder letzten) Position des zurückgegebenen Arrays erscheint. Kommt separator in str nicht vor, enthält das zurückgegebene Array ein Element, das aus dem gesamten String besteht.
Ist separator ein leerer String (""), wird str in ein Array seiner einzelnen UTF-16-„Zeichen" umgewandelt, ohne leere Strings an beiden Enden des resultierenden Strings.
Ist separator eine Regex, die leere Strings matcht, hängt es davon ab, ob die Regex Unicode-aware ist, ob der Match nach UTF-16-Code-Units oder nach Unicode-Codepunkten geteilt wird.
Ist separator ein regulärer Ausdruck mit Capturing-Gruppen, werden bei jedem Match von separator die erfassten Gruppen (einschließlich etwaiger undefined-Ergebnisse) in das Ausgabe-Array eingefügt. Dieses Verhalten wird durch die Symbol.split-Methode der Regex festgelegt.
Ist separator ein Objekt mit einer Symbol.split-Methode, wird diese Methode mit dem Ziel-String und limit als Argumenten und this gesetzt auf das Objekt aufgerufen. Ihr Rückgabewert wird zum Rückgabewert von split.
Jeder andere Wert wird vor der Verwendung als Separator in einen String konvertiert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $separator Pflicht | string | RegExp | Object | — | Das Muster, das beschreibt, wo jede Teilung stattfinden soll. Kann undefined, ein String oder ein Objekt mit einer Symbol.split-Methode sein — das typische Beispiel ist ein regulärer Ausdruck. Wird separator weggelassen oder undefined übergeben, gibt split() ein Array mit dem aufrufenden String als einzigem Element zurück. Alle Werte, die nicht undefined oder Objekte mit einer [Symbol.split]()-Methode sind, werden zu Strings konvertiert. |
| $limit | number | — | Eine nicht-negative Ganzzahl, die eine Obergrenze für die Anzahl der Teilstrings im Array festlegt. Wenn angegeben, wird der String an jedem Vorkommen des angegebenen separator geteilt, aber gestoppt, sobald limit Einträge im Array platziert wurden. Übrig gebliebener Text wird nicht im Array aufgenommen. Das Array kann weniger Einträge als limit enthalten, wenn das Ende des Strings vor Erreichen des Limits erreicht wird. Ist limit gleich 0, wird [] zurückgegeben. |
Rückgabewert
separator ein String, wird ein Array von Strings zurückgegeben, geteilt an jeder Stelle, an der separator im gegebenen String vorkommt. Ist separator eine Regex, enthält das zurückgegebene Array auch die erfassten Gruppen für jeden Separator-Match; unerfasste Capturing-Gruppen sind undefined im Array. Hat separator eine benutzerdefinierte [Symbol.split]()-Methode, wird ihr Rückgabewert direkt zurückgegeben.Beispiele
split() verwenden
const emptyString = "";
// string is empty and separator is non-empty
console.log(emptyString.split("a"));
// [""]
// string and separator are both empty strings
console.log(emptyString.split(emptyString));
// []
Funktion, die einen String teilt
function splitString(stringToSplit, separator) {
const arrayOfStrings = stringToSplit.split(separator);
console.log("The original string is:", stringToSplit);
console.log("The separator is:", separator);
console.log(
"The array has",
arrayOfStrings.length,
"elements:",
arrayOfStrings.join(" / "),
);
}
const tempestString = "Oh brave new world that has such people in it.";
const monthString = "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec";
const space = " ";
const comma = ",";
splitString(tempestString, space);
splitString(tempestString);
splitString(monthString, comma);
Leerzeichen aus einem String entfernen
const names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand ";
console.log(names);
const re = /\s*(?:;|$)\s*/;
const nameList = names.split(re);
console.log(nameList);
Eine begrenzte Anzahl an Teilungen zurückgeben
const myString = "Hello World. How are you doing?";
const splits = myString.split(" ", 3);
console.log(splits); // [ "Hello", "World.", "How" ]
Mit einem RegExp teilen und Teile des Separators im Ergebnis einschließen
const myString = "Hello 1 word. Sentence number 2.";
const splits = myString.split(/(\d)/);
console.log(splits);
// [ "Hello ", "1", " word. Sentence number ", "2", "." ]
Einen benutzerdefinierten Splitter verwenden
const splitByNumber = {
[Symbol.split](str) {
let num = 1;
let pos = 0;
const result = [];
while (pos < str.length) {
const matchPos = str.indexOf(num, pos);
if (matchPos === -1) {
result.push(str.substring(pos));
break;
}
result.push(str.substring(pos, matchPos));
pos = matchPos + String(num).length;
num++;
}
return result;
},
};
const myString = "a1bc2c5d3e4f";
console.log(myString.split(splitByNumber)); // [ "a", "bc", "c5d", "e", "f" ]
Splitter mit internem Zustand
const DELIMITER = ";";
// Split the commands, but remove any invalid or unnecessary values.
const splitCommands = {
[Symbol.split](str, lim) {
const results = [];
const state = {
on: false,
brightness: {
current: 2,
min: 1,
max: 3,
},
};
let pos = 0;
let matchPos = str.indexOf(DELIMITER, pos);
while (matchPos !== -1) {
const subString = str.slice(pos, matchPos).trim();
switch (subString) {
case "light on":
// If the `on` state is already true, do nothing.
if (!state.on) {
state.on = true;
results.push(subString);
}
break;
case "light off":
// If the `on` state is already false, do nothing.
if (state.on) {
state.on = false;
results.push(subString);
}
break;
case "brightness up":
// Enforce a brightness maximum.
if (state.brightness.current < state.brightness.max) {
state.brightness.current += 1;
results.push(subString);
}
break;
case "brightness down":
// Enforce a brightness minimum.
if (state.brightness.current > state.brightness.min) {
state.brightness.current -= 1;
results.push(subString);
}
break;
}
if (results.length === lim) {
break;
}
pos = matchPos + DELIMITER.length;
matchPos = str.indexOf(DELIMITER, pos);
}
// If we broke early due to reaching the split `lim`, don't add the remaining commands.
if (results.length < lim) {
results.push(str.slice(pos).trim());
}
return results;
},
};
const commands =
"light on; brightness up; brightness up; brightness up; light on; brightness down; brightness down; light off";
console.log(commands.split(splitCommands, 3)); // ["light on", "brightness up", "brightness down"]
Regex, die leere Strings matcht
"😄😄".split(/(?:)/); // [ "\ud83d", "\ude04", "\ud83d", "\ude04" ]
"😄😄".split(/(?:)/u); // [ "😄", "😄" ]
// Wichtig · Fallstricke
"".split("") ist daher der einzige Weg, ein leeres Array zu erzeugen, wenn ein String als separator übergeben wird und limit nicht 0 ist.
Warnung: Wenn der leere String ("") als Separator verwendet wird, wird der String nicht nach vom Benutzer wahrgenommenen Zeichen (Grapheme-Clustern) oder Unicode-Zeichen (Codepunkten) geteilt, sondern nach UTF-16-Code-Units. Das zerstört Surrogate-Paare.
Hinweis: \d matcht die Zeichenklasse für Ziffern zwischen 0 und 9.