Вы можете сделать что-то вроде этого:
"1234567890".match(/.{1,2}/g);
// Results in:
["12", "34", "56", "78", "90"]
Метод по-прежнему будет работать со строками, размер которых не кратен размеру фрагмента:
"123456789".match(/.{1,2}/g);
// Results in:
["12", "34", "56", "78", "9"]
В общем, для любой строки, из которой вы хотите извлечь не более n подстрок размера, вы должны сделать:
str.match(/.{1,n}/g); // Replace n with the size of the substring
Если ваша строка может содержать переводы строки или возврат каретки, вы должны сделать:
str.match(/(.|[\r\n]){1,n}/g); // Replace n with the size of the substring
Что касается производительности, я попробовал это примерно с 10 тысячами символов, и это заняло чуть больше секунды в Chrome. YMMV.
Это также может быть использовано в функции многократного использования:
function chunkString(str, length) {
return str.match(new RegExp('.{1,' + length + '}', 'g'));
}
.
не соответствует переводу строки. Я буду обновлять ответ так , что он принимает\n
и\r
во внимание.var chunks = str.split("").reverse().join().match(/.{1, 4}/).map(function(s) { return s.split("").reverse().join(); });
. Это происходит кусками 4. Я не уверен, что вы подразумеваете под «меньше или больше». Имейте в виду, что это не будет работать в целом, особенно со строками, которые содержат символы объединения и могут также ломать строки Unicode.[^]
. С этим ваш пример приведет кstr.match(/[^]{1,n}/g)
match
,slice
,substr
иsubstring
match
иslice
для разных размеров кускаmatch
иslice
с небольшим размером кускаНижняя граница:
match
очень неэффективно,slice
лучше, на Firefoxsubstr
/substring
еще лучшеmatch
еще более неэффективен для коротких строк (даже с кэшированным регулярным выражением - возможно, из-за времени установки синтаксического анализа регулярного выражения)match
еще более неэффективен для больших размеров чанка (вероятно, из-за невозможности «прыгнуть»)match
превосходитslice
старые версии IE, но проигрывает во всех других системахисточник
Я создал несколько более быстрых вариантов, которые вы можете увидеть на jsPerf . Мой любимый это:
источник
Math.ceil()
чтобы определить правильное количество кусков.Это быстрое и простое решение -
источник
substr()
вместоsubstring()
.Сюрприз! Вы можете использовать разделение для разделения.
Результаты в
[ '12', '34', '56', '78', '90', ' ' ]
источник
filter (o=>o)
?filter(x=>x)
используется для фильтрации этих пустых элементовисточник
Я написал расширенную функцию, поэтому длина фрагмента также может быть массивом чисел, например [1,3]
Код
вернется:
источник
это разделить большую строку на маленькие строки заданных слов .
источник
источник
Я бы использовал регулярное выражение ...
источник
Назовите это как нужно
источник
Вот решение, которое я нашел для шаблонных строк после небольшого эксперимента:
Использование:
источник
Вы можете использовать
reduce()
без каких-либо регулярных выражений:источник
reduce
метод.В виде функции-прототипа:
источник
Вот код, который я использую, он использует String.prototype.slice .
Да, это довольно длинный ответ, поскольку он пытается следовать действующим стандартам настолько близко, насколько это возможно, и, конечно, содержит разумное количество JSDOC комментариев . Однако после минимизации код составляет всего 828 байт, а после сжатия для передачи - всего 497 байт.
1 метод, который это добавляет
String.prototype
(используя Object.defineProperty, где доступно):Ряд тестов были включены для проверки функциональности.
Беспокоитесь, что длина кода повлияет на производительность? Не нужно беспокоиться, http://jsperf.com/chunk-string/3
Большая часть дополнительного кода существует, чтобы быть уверенным, что код будет отвечать одинаково в нескольких средах javascript.
источник
Используя метод slice ():
То же самое можно сделать с помощью метода substring ().
источник
Моя проблема с вышеупомянутым решением состоит в том, что он переносит строку в фрагменты формального размера независимо от положения в предложениях.
Я думаю, что следующий лучший подход; хотя требуется некоторая настройка производительности:
источник
Вы определенно можете сделать что-то вроде
чтобы получить это:
Если вы хотите динамически вводить / корректировать размер чанка так, чтобы чанки имели размер n, вы можете сделать это:
Чтобы найти все возможные блоки размера n в исходной строке, попробуйте это:
Вы должны в конечном итоге:
источник
источник
Как насчет этого небольшого куска кода:
источник
источник