Как видно из заголовка, у меня есть строка, и я хочу разбить ее на сегменты по n символов.
Например:
var str = 'abcdefghijkl';
после некоторой магии n=3
, он станет
var arr = ['abc','def','ghi','jkl'];
Есть ли способ сделать это?
Как видно из заголовка, у меня есть строка, и я хочу разбить ее на сегменты по n символов.
Например:
var str = 'abcdefghijkl';
после некоторой магии n=3
, он станет
var arr = ['abc','def','ghi','jkl'];
Есть ли способ сделать это?
var str = 'abcdefghijkl';
console.log(str.match(/.{1,3}/g));
Примечание. Используйте {1,3}
вместо того, {3}
чтобы просто включить остаток для длин строк, не кратных 3, например:
console.log("abcd".match(/.{1,3}/g)); // ["abc", "d"]
Еще пара тонкостей:
.
они не будут захватывать их. Используйте /[\s\S]{1,3}/
вместо этого. (Спасибо @Mike).match()
вернется, null
когда вы можете ожидать пустой массив. Защитите от этого, добавив || []
.Таким образом, вы можете в конечном итоге:
var str = 'abcdef \t\r\nghijkl';
var parts = str.match(/[\s\S]{1,3}/g) || [];
console.log(parts);
console.log(''.match(/[\s\S]{1,3}/g) || []);
[\s\S]
вместо того,.
чтобы не потерпеть неудачу на новых строках.''.match(/.{1,3}/g)
и''.match(/.{3}/g)
вернутьnull
вместо пустого массива.Если вы не хотите использовать регулярное выражение ...
jsFiddle .
... в противном случае решение регулярных выражений довольно хорошо :)
источник
3
переменная, как предложено ОП. Это более читабельно, чем объединение строки регулярного выражения.источник
3
меня, но возвращаетсяnull
с250
. 🤔Опираясь на предыдущие ответы на этот вопрос; следующая функция разделит строку (
str
) n-номер (size
) символов.демонстрация
источник
Мое решение (синтаксис ES6):
Мы могли бы даже создать функцию с этим:
Затем вы можете легко вызвать функцию многоразовым способом:
ура
источник
Чистый раствор без REGEX
источник
Выше функция - это то, что я использую для чанкирования Base64. Это создаст разрыв строки на 75 символов.
источник
replace(/.{1,75}/g, '$&\n')
.Здесь мы добавляем строку с другой строкой каждые n символов:
если мы будем использовать выше, как так:
мы получили:
и здесь мы делаем то же самое, но нажимаем на массив:
и затем запустите его:
мы получили:
если кто-то знает способ упростить приведенный выше код, lmk, но он должен хорошо работать для строк.
источник
Некоторое чистое решение без использования регулярных выражений:
Пример использования - https://jsfiddle.net/maciejsikora/b6xppj4q/ .
Я также попытался сравнить свое решение с регулярным выражением, которое было выбрано в качестве правильного ответа. Некоторый тест можно найти на jsfiddle - https://jsfiddle.net/maciejsikora/2envahrk/ . Тесты показывают, что оба метода имеют одинаковую производительность, возможно, на первый взгляд решение регулярных выражений немного быстрее, но судите сами.
источник
С
.split
:и
.replace
будет:/(?!$)/
это остановить до конца/$/
, без это:игнорирование группы
/(?:
...)/
не нужно,.replace
но.split
это добавляет группы в arr:источник
Вот способ сделать это без регулярных выражений или явных циклов, хотя это немного растягивает определение одного элемента:
Он работает путем разделения строки на массив отдельных символов, а затем используется
Array.reduce
для итерации по каждому символу. Обычноreduce
возвращает одно значение, но в этом случае единственным значением является массив, и, когда мы передаем каждый символ, мы добавляем его к последнему элементу в этом массиве. Как только последний элемент в массиве достигнет целевой длины, мы добавляем новый элемент массива.источник
Подходя немного позже к обсуждению, но здесь вариант, который немного быстрее, чем подстрока + массив, толкает один.
Предварительный расчет конечного значения как части цикла for выполняется быстрее, чем выполнение встроенной математики внутри подстроки. Я протестировал его в Firefox и Chrome, и они оба показывают ускорение.
Вы можете попробовать это здесь
источник