Spec-Zone.ru › JavaScript

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"]

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-string.prototype.split

Совместимость с браузерами

Настольные компьютеры Мобильные Сервер
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API