正如标题所说,我有一个字符串,我想把它分成n个字符的片段。

例如:

var str = 'abcdefghijkl';

当n=3时,它会变成

var arr = ['abc','def','ghi','jkl'];

有办法做到这一点吗?


当前回答

稍后再讨论,但这里有一个变化,比子字符串+数组push 1快一点。

// substring + array push + end precalc
var chunks = [];

for (var i = 0, e = 3, charsLength = str.length; i < charsLength; i += 3, e += 3) {
    chunks.push(str.substring(i, e));
}

作为for循环的一部分,预先计算结束值比在子字符串中进行内联计算要快。我已经在Firefox和Chrome上测试过了,它们都显示了加速。

你可以在这里试试

其他回答

str.match(/.{3}/g); // => ['abc', 'def', 'ghi', 'jkl']

如果你不想使用正则表达式…

var chunks = [];

for (var i = 0, charsLength = str.length; i < charsLength; i += 3) {
    chunks.push(str.substring(i, i + 3));
}

jsFiddle。

...否则正则表达式的解决方案是相当好的:)

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)

试试这个简单的代码,它会像魔法一样工作!

let letters = "abcabcabcabcabc";
// we defined our variable or the name whatever
let a = -3;
let finalArray = [];
for (let i = 0; i <= letters.length; i += 3) {
    finalArray.push(letters.slice(a, i));
  a += 3;
}
// we did the shift method cause the first element in the array will be just a string "" so we removed it
finalArray.shift();
// here the final result
console.log(finalArray);