Как разделить строку '1234567890123456' на 4 равные части лишь с помощью split
?
Едва ли это можно сделать, передавая в split строку. Хорошо, что этот метод принимает ещё и регулярки.
Сначала надо понять что в нашем случае должно матчить регулярное выражение. А ничего, пустоту! Но в определённых местах. Чтобы ничего не матчить, воспользуемся positive lookbehind
?<=
Нам надо заматчить пустоту после каждых четырёх символов:
'1234567890123456'.split(/(?<=(.{4})+)/)
Попробуем.
["1234", "1234", "5", "2345", "6", "3456", "7", "4567", "8", "1234", "9", "2345", "0", "3456", "1", "4567", "2", "1234", "3", "2345", "4", "3456", "5", "4567", "6"]
Что-то не то. Идём на MDN и узнаём, что
Если разделитель является регулярным выражением, содержащим подгруппы, то каждый раз при сопоставлении с разделителем, результаты (включая те, что не определены) захвата подгруппы будут помещаться внутрь выходного массива.
Всё понятно – скобочки, в которые мы взяли четыре символа .{4}
, чтобы повторить их с помощью +
, образовали группу, и она тоже складывается в итоговый массив. Добавим ?:
, чтобы получить non-capturing group
'1234567890123456'.split(/(?<=(?:.{4})+)/)
И так…
["1234", "5", "6", "7", "8", "9", "0", "1", "2", "3", "4", "5", "6"]
Почти. Осталось лишь сказать нашей регулярке, что надо всегда смотреть с начала (^
), чтобы она не находила пустоту после всех 4х символов.
'1234567890123456'.split(/(?<=^(?:.{4})+)/)
Вуаля.
["1234", "5678", "9012", "3456"]