Секреты JavaScript: используем split для нескольких разделителей

Автор: Амадей Красавчик Дериглазов

Недавно передо мной встала задача разбить строку на составные части методами JavaScript – достаточно распространённая задача, для которой идеально подходит метод split() глобального объекта String. Однако сложность заключалась в том, что в качестве разделителя у меня должен был выступать не символ или подстрока, а некоторое подмножество символов. Для большей ясности поясню задачу на примере:

Дано:
Пусть есть строка «Австралия,Австрия;Белоруссия;Бельгия;Болгария,Венгрия»

Требуется:
Получить список стран, расчленив исходную строку, используя в качестве разделителей символы «запятой» и «точки с запятой».

Первое, что приходит в голову, если не копаться в документации по JS, тупо задать массив сепараторов и в цикле последовательно в несколько шагов дробить посимвольно строку с помощью фактически многократного применения split(',') и split(';'). Закодировать данный алгоритм на JS и оформить его в виде функции – не проблема. Но решение данное выглядит достаточно громоздко и в некотором смысле позорно, учитывая, что данная задача решается в одну строчку красивого кода. – Но при условии, если, конечно, внимательно изучить все возможности метода split().

Итак, мы подошли к самому интересному, оказывается наш любимый метод split() намного мощнее, чем о нём принято думать в кругу программистов, не читающих документацию JavaScript. Что касается меня, то знакомство с документацией я категорически избегаю, но являюсь адептом интуитивно-логического программирования. И моя интуитивная логика в моменты смятения разума сама меня направляет к нужным местам документации, и в эти моменты я узнаю всегда то, что открывает мне новые горизонты. Так произошло и на этот раз. Оказалось, что в качестве разделителя метод split() может принимать регулярное выражение. В связи с чем, решение описанной выше задачи можно записать в очень компактном виде:

var str = 'Австралия,Австрия;Белоруссия;Бельгия;Болгария,Венгрия';
var array_country = str.split(/(?:\;|\,)/);

Вот такой простой и красивый код получился у меня в итоге. А главное, он работает во всех известных мне браузерах. Чему я очень рад и радость свою выношу на публичное обозрение. Надеюсь, описанное решение окажется вполне понятным и ещё для кого-нибудь ценным.

Дата публикации: 19.07.2016

К списку гламурных манифестов сообщества «Профессия – делать сайты»