正如标题所说,我有一个字符串,我想把它分成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';
var res = str.match(/.../g)
console.log(res)
这里点的数量决定了你想在每个单词中包含多少文本。
其他回答
function str_split(string, length = 1) {
if (0 >= length)
length = 1;
if (length == 1)
return string.split('');
var string_size = string.length;
var result = [];
for (let i = 0; i < string_size / length; i++)
result[i] = string.substr(i * length, length);
return result;
}
str_split(str, 3)
基准测试:http://jsben.ch/HkjlU(不同浏览器的结果不同)
结果(Chrome 104)
var str = 'abcdefghijkl';
var res = str.match(/.../g)
console.log(res)
这里点的数量决定了你想在每个单词中包含多少文本。
一些不使用正则表达式的干净解决方案:
/**
* Create array with maximum chunk length = maxPartSize
* It work safe also for shorter strings than part size
**/
function convertStringToArray(str, maxPartSize){
const chunkArr = [];
let leftStr = str;
do {
chunkArr.push(leftStr.substring(0, maxPartSize));
leftStr = leftStr.substring(maxPartSize, leftStr.length);
} while (leftStr.length > 0);
return chunkArr;
};
使用示例—https://jsfiddle.net/maciejsikora/b6xppj4q/。
我还尝试将我的解决方案与被选为正确答案的regexp进行比较。可以在jsfiddle - https://jsfiddle.net/maciejsikora/2envahrk/上找到一些测试。测试表明这两种方法具有相似的性能,可能乍一看regexp解决方案稍微快一点,但请自行判断。
我的解决方案(ES6语法):
const source = "8d7f66a9273fc766cd66d1d";
const target = [];
for (
const array = Array.from(source);
array.length;
target.push(array.splice(0,2).join(''), 2));
我们甚至可以这样创建一个函数:
function splitStringBySegmentLength(source, segmentLength) {
if (!segmentLength || segmentLength < 1) throw Error('Segment length must be defined and greater than/equal to 1');
const target = [];
for (
const array = Array.from(source);
array.length;
target.push(array.splice(0,segmentLength).join('')));
return target;
}
然后你可以以一种可重用的方式轻松地调用函数:
const source = "8d7f66a9273fc766cd66d1d";
const target = splitStringBySegmentLength(source, 2);
干杯
str.match(/.{3}/g); // => ['abc', 'def', 'ghi', 'jkl']