Split: примеры (JAVASCRIPT)

Полный разбор метода split() для разделения строк в JavaScript
Раздел: Строки, Разделение
split(separator, limit?): array

Основы метода split

Метод split() в JavaScript используется для разделения строки на подстроки с помощью указанного разделителя и возвращает массив этих подстрок. Он является частью объекта String.

Метод применяется, когда требуется разбить строку на части по определенному правилу, например, разобрать CSV-данные, разделить предложение на слова или извлечь компоненты из URL.

Синтаксис и аргументы

Синтаксис метода: str.split([separator[, limit]])

  • separator (необязательный): Определяет символ или регулярное выражение, по которому происходит разбиение строки. Если разделитель является пустой строкой (''), строка преобразуется в массив отдельных символов. Если аргумент опущен, возвращается массив с одним элементом – исходной строкой.
  • limit (необязательный): Целое число, определяющее максимальное количество элементов в возвращаемом массиве. Если лимит указан, метод возвращает не более этого количества подстрок, а остаток строки игнорируется.

Возвращаемое значение

Метод всегда возвращает новый массив. Если разделитель не найден в строке, массив будет содержать один элемент – исходную строку. Если разделитель находится в начале или конце строки, это создаст пустые строки в результирующем массиве.

Простые примеры использования

Разделение строки по запятой:

const str = 'яблоко,банан,апельсин';
const result = str.split(',');
console.log(result);
['яблоко', 'банан', 'апельсин']

Использование пустого разделителя:

const str = 'Привет';
const result = str.split('');
console.log(result);
['П', 'р', 'и', 'в', 'е', 'т']

Применение лимита:

const str = 'один два три четыре';
const result = str.split(' ', 2);
console.log(result);
['один', 'два']

Использование регулярного выражения в качестве разделителя:

const str = 'Слова1разделены2цифрами3';
const result = str.split(/\d/);
console.log(result);
['Слова', 'разделены', 'цифрами', '']

Разделитель в конце строки:

const str = 'строка,с,запятыми,';
const result = str.split(',');
console.log(result);
['строка', 'с', 'запятыми', '']

Похожие функции в JavaScript

В JavaScript существуют другие методы для работы со строками, которые могут решать схожие задачи.

  • String.prototype.match(): Используется для поиска совпадений в строке с помощью регулярного выражения. Возвращает массив совпадений или null. Удобен для извлечения данных по шаблону, а не для простого разделения.
  • String.prototype.replace(): Заменяет подстроки в строке. Может использоваться для удаления или преобразования частей строки перед разделением.
  • Array.prototype.join(): Выполняет обратную операцию – объединяет элементы массива в строку с указанным разделителем.
  • Регулярные выражения с флагом 'g': Для сложного поиска и извлечения подстрок часто эффективнее использовать match() с регулярным выражением, чем split() со сложным разделителем.

Распространенные ошибки

При работе с split() можно столкнуться с неочевидным поведением.

Ожидание, что метод изменит исходную строку:

const str = 'исходная строка';
str.split(' ');
console.log(str); // Ожидается массив, но выводится исходная строка
'исходная строка'

Метод не изменяет оригинальную строку, а возвращает новый массив.

Неправильное использование разделителя-регулярного выражения при необходимости буквального разделения:

const str = 'a.b';
const result = str.split('.'); // Точка - специальный символ в регулярных выражениях
console.log(result);
[]

Для буквального разделения точкой нужно экранировать символ: str.split('\.') или использовать [.].

Попытка вызова split() на значении, не являющемся строкой, без приведения типа:

const num = 12345;
const result = num.split(''); // Ошибка
console.log(result);
TypeError: num.split is not a function

Предварительно нужно преобразовать число в строку: String(num).split('').

История изменений

Метод split() присутствует в JavaScript с самых ранних версий (ECMAScript 1). За время развития языка существенных изменений в его базовую функциональность не вносилось.

Основные уточнения касались взаимодействия с регулярными выражениями, особенно в контексте захватывающих групп. Если разделитель является регулярным выражением и содержит захватывающие группы, то элементы этих групп включаются в возвращаемый массив.

В современных стандартах JavaScript поведение метода четко специфицировано, включая обработку пустых строк и лимита.

Расширенные примеры

Использование захватывающих групп в регулярном выражении-разделителе:

Пример javascript
const str = '2023-01-15';
const result = str.split(/(-)/);
console.log(result);
['2023', '-', '01', '-', '15']

Разбор простого CSV-файла с обработкой кавычек (упрощенный вариант):

Пример javascript
const csvLine = '"Иванов, Иван", "инженер", 30';
// Простое разделение по запятой снаружи кавычек не сработает корректно
const naiveSplit = csvLine.split(',');
console.log('Наивное разделение:', naiveSplit);
// Более сложный вариант с использованием regex для учета кавычек
const regex = /,(?=(?:[^"]*"[^"]*")*[^"]*$)/;
const smartSplit = csvLine.split(regex).map(field => field.trim());
console.log('Умное разделение:', smartSplit);
Наивное разделение: ['"Иванов', ' Иван"', ' "инженер"', ' 30']
Умное разделение: ['"Иванов, Иван"', '"инженер"', '30']

Обработка строки с несколькими возможными разделителями:

Пример javascript
const data = 'яблоко;банан,апельсин груша';
const result = data.split(/[;,\s]+/); // Разделитель: точка с запятой, запятая или пробел
console.log(result);
['яблоко', 'банан', 'апельсин', 'груша']

Разделение строки с сохранением разделителя в результате (с использованием lookahead):

Пример javascript
const str = '10px20rem30%';
const result = str.split(/(?<=px|rem|%)/); // Разделить после единиц измерения
console.log(result);
['10px', '20rem', '30%']

Обратное разделение строки (с конца) с помощью комбинации методов:

Пример javascript
const str = 'один два три четыре пять';
const limit = 3;
// Разделить, взять последние `limit` элементов
const result = str.split(' ').slice(-limit);
console.log(result);
['три', 'четыре', 'пять']

Аналоги функции в других языках

Функция разделения строк существует практически во всех языках программирования, но с разным синтаксисом и особенностями.

Python: Метод str.split(). По умолчанию разделителем является любой пробельный символ, а не конкретный символ.

text = "яблоко,банан,апельсин"
result = text.split(",")
print(result)
['яблоко', 'банан', 'апельсин']

PHP: Функция explode(). Аналог split(). Также есть preg_split() для разделения по регулярному выражению.

$str = "яблоко,банан,апельсин";
$result = explode(",", $str);
print_r($result);
Array ( [0] => яблоко [1] => банан [2] => апельсин )

C#: Метод String.Split(). Принимает массив символов-разделителей и параметры, например, для удаления пустых записей.

string str = "яблоко,банан,апельсин";
string[] result = str.Split(',');
Console.WriteLine($"[{string.Join(", ", result)}]");
[яблоко, банан, апельсин]

MySQL: Функция SUBSTRING_INDEX(). Позволяет извлечь часть строки до указанного количества вхождений разделителя, но не возвращает массив.

SELECT SUBSTRING_INDEX('www.example.com', '.', 2);
www.example

JS split function comments

En
Split Splits a string into an array of substrings by a specified separator