String.prototype.split()
Базовая поддержка Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в версиях браузеров. Она доступна в браузерах с июля 2015 года.
Метод split() объекта String принимает шаблон и делит строку на упорядоченный список подстрок, ища шаблон, помещает эти подстроки в массив и возвращает этот массив.
Попробуйте
const str = "The quick brown fox jumps over the lazy dog.";
const words = str.split(" ");
console.log(words[3]);
// Expected output: "fox"
const chars = str.split("");
console.log(chars[8]);
// Expected output: "k"
const strCopy = str.split();
console.log(strCopy);
// Expected output: Array ["The quick brown fox jumps over the lazy dog."]
Синтаксис
split(separator) split(separator, limit)
Параметры
-
separator - Шаблон, описывающий, где должен происходить каждый разделитель. Может быть
undefined, строкой или объектом с методомSymbol.split— типичным примером является регулярное выражение. Пропускseparatorили передачаundefinedприводит к тому, чтоsplit()возвращает массив, содержащий вызывающую строку как один элемент. Все значения, которые не являютсяundefinedили объектами с методом[Symbol.split](), преобразуются в строки. -
limitНеобязательный - Неотрицательное целое число, определяющее максимальное количество подстрок, которые будут включены в массив. Если указано, строка разбивается при каждом вхождении указанного
separator, но останавливается, когда в массив помещеноlimitэлементов. Любой оставшийся текст не включается в массив вовсе.- Массив может содержать меньше записей, чем
limit, если конец строки достигается до достижения лимита. - Если
limitравен0, возвращается[].
- Массив может содержать меньше записей, чем
Возвращаемое значение
Если separator — это строка, возвращается Array строк, разделенных в каждой точке, где separator встречается в данной строке.
Если separator — это регулярное выражение, возвращаемый Array также содержит захваченные группы для каждого совпадения разделителя; подробности см. ниже. Захваченные группы могут не совпадать, в этом случае они undefined в массиве.
Если separator имеет собственный метод [Symbol.split](), его возвращаемое значение возвращается напрямую.
Описание
Если separator — непустая строка, целевая строка разбивается по всем совпадениям separator без включения separator в результаты. Например, строка, содержащая значения, разделенные табуляцией (TSV), может быть разобрана путем передачи символа табуляции в качестве разделителя, например myString.split("\t"). Если separator содержит несколько символов, должна быть найдена вся последовательность символов для разделения. Если separator появляется в начале (или конце) строки, это все равно приводит к разделению, в результате чего пустая (т.е. нулевой длины) строка появляется на первой (или последней) позиции возвращаемого массива. Если separator не встречается в str, возвращаемый массив содержит один элемент, состоящий из всей строки.
Если separator — пустая строка (""), str преобразуется в массив каждой из её UTF-16 "символов", без пустых строк на обоих концах результирующей строки.
Примечание: "".split("") является единственным способом получения пустого массива, когда строка передается в качестве separator, а limit не равен 0.
Предупреждение: Когда пустая строка ("") используется в качестве разделителя, строка не разбивается по *воспринимаемым пользователем символам* (графемам) или Unicode-символам (кодовым точкам), а по UTF-16 кодовым единицам. Это разрушает суррогатные пары. См. "How do you get a string to a character array in JavaScript?" на Stack Overflow.
Если separator — регулярное выражение, которое совпадает с пустыми строками, зависит от того, совпадает ли оно по UTF-16 кодовым единицам или по Unicode кодовым точкам, зависит от того, является ли регулярное выражение ориентированным на Unicode.
"😄😄".split(/(?:)/); // [ "\ud83d", "\ude04", "\ud83d", "\ude04" ] "😄😄".split(/(?:)/u); // [ "😄", "😄" ]
Если separator — регулярное выражение с захватывающими группами, то каждый раз, когда separator совпадает, захваченные группы (включая любые undefined результаты) вставляются в выходной массив. Это поведение определяется методом Symbol.split регулярного выражения.
Если separator — объект с методом Symbol.split, этот метод вызывается с целевой строкой и limit в качестве аргументов, а this установлен в объект. Его возвращаемое значение становится возвращаемым значением split.
Любое другое значение будет преобразовано в строку перед использованием в качестве разделителя.
Примеры
Использование split()
Когда строка пуста, а указан непустой разделитель, split() возвращает [""]. Если строка и разделитель — обе пустые строки, возвращается пустой массив.
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));
// []
Следующий пример определяет функцию, которая разбивает строку на массив строк с использованием separator. После разделения строки функция выводит сообщения, указывающие исходную строку (до разделения), использованный разделитель, количество элементов в массиве и отдельные элементы массива.
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);
Этот пример дает следующий вывод:
The original string is: "Oh brave new world that has such people in it." The separator is: " " The array has 10 elements: Oh / brave / new / world / that / has / such / people / in / it. The original string is: "Oh brave new world that has such people in it." The separator is: "undefined" The array has 1 elements: Oh brave new world that has such people in it. The original string is: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec" The separator is: "," The array has 12 elements: Jan / Feb / Mar / Apr / May / Jun / Jul / Aug / Sep / Oct / Nov / Dec
Удаление пробелов из строки
В следующем примере split() ищет ноль или более пробелов, за которыми следует точка с запятой, за которой следуют ноль или более пробелов — и, найдя это, удаляет пробелы и точку с запятой из строки. nameList — это массив, возвращаемый в результате split().
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);
Это выводит две строки; первая строка выводит исходную строку, а вторая строка выводит результирующий массив.
Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand [ "Harry Trump", "Fred Barney", "Helen Rigby", "Bill Abel", "Chris Hand", "" ]
Возврат ограниченного числа разделений
В следующем примере split() ищет пробелы в строке и возвращает первые 3 найденных разделения.
const myString = "Hello World. How are you doing?";
const splits = myString.split(" ", 3);
console.log(splits); // [ "Hello", "World.", "How" ]
Разделение с помощью RegExp для включения частей разделителя в результат
Если separator — регулярное выражение, содержащее захватывающие скобки ( ), совпавшие результаты включаются в массив.
const myString = "Hello 1 word. Sentence number 2."; const splits = myString.split(/(\d)/); console.log(splits); // [ "Hello ", "1", " word. Sentence number ", "2", "." ]
Примечание: \d соответствует классу символов для цифр от 0 до 9.
Использование пользовательского разделителя
Объект с методом Symbol.split может быть использован в качестве разделителя с пользовательским поведением.
Следующий пример разбивает строку, используя внутреннее состояние, состоящее из инкрементируемого числа:
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" ]
Следующий пример использует внутреннее состояние для обеспечения определенного поведения и для получения "действительного" результата.
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"]
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
split |
1 |
12 |
1 |
3 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
См. также
- Polyfill для
String.prototype.splitвcore-jsс исправлениями и реализацией современного поведения, такого как поддержкаSymbol.split - Polyfill es-shims для
String.prototype.split - Руководство по регулярным выражениям
String.prototype.charAt()String.prototype.indexOf()String.prototype.lastIndexOf()Array.prototype.join()
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split