正如标题所说,我有一个字符串,我想把它分成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)
这里点的数量决定了你想在每个单词中包含多少文本。
其他回答
const chunkStr = (str, n, acc) => {
if (str.length === 0) {
return acc
} else {
acc.push(str.substring(0, n));
return chunkStr(str.substring(n), n, acc);
}
}
const str = 'abcdefghijkl';
const splittedString = chunkStr(str, 3, []);
干净的解决方案没有REGEX
如果你不想使用正则表达式…
var chunks = [];
for (var i = 0, charsLength = str.length; i < charsLength; i += 3) {
chunks.push(str.substring(i, i + 3));
}
jsFiddle。
...否则正则表达式的解决方案是相当好的:)
试试这个简单的代码,它会像魔法一样工作!
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);
这里有一种不需要正则表达式或显式循环的方法,尽管它有点扩展了一行代码的定义:
const input = 'abcdefghijlkm';
// Change `3` to the desired split length.
const output = input.split('').reduce((s, c) => {
let l = s.length-1;
(s[l] && s[l].length < 3) ? s[l] += c : s.push(c);
return s;
}, []);
console.log(output); // output: [ 'abc', 'def', 'ghi', 'jlk', 'm' ]
它的工作原理是将字符串分割为单个字符的数组,然后使用array。还原遍历每个字符。通常情况下,reduce会返回一个值,但在这种情况下,这个值恰好是一个数组,当我们传递每个字符时,我们将它附加到该数组的最后一项。一旦数组中的最后一项达到目标长度,就追加一个新的数组项。
str.match(/.{3}/g); // => ['abc', 'def', 'ghi', 'jkl']