正如标题所说,我有一个字符串,我想把它分成n个字符的片段。
例如:
var str = 'abcdefghijkl';
当n=3时,它会变成
var arr = ['abc','def','ghi','jkl'];
有办法做到这一点吗?
正如标题所说,我有一个字符串,我想把它分成n个字符的片段。
例如:
var str = 'abcdefghijkl';
当n=3时,它会变成
var arr = ['abc','def','ghi','jkl'];
有办法做到这一点吗?
当前回答
function chunk(er){
return er.match(/.{1,75}/g).join('\n');
}
上面的函数是我用于Base64分块的。它将创建一个每75个字符的换行符。
其他回答
我的解决方案(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);
干杯
function chunk(er){
return er.match(/.{1,75}/g).join('\n');
}
上面的函数是我用于Base64分块的。它将创建一个每75个字符的换行符。
如果你不想使用正则表达式…
var chunks = [];
for (var i = 0, charsLength = str.length; i < charsLength; i += 3) {
chunks.push(str.substring(i, i + 3));
}
jsFiddle。
...否则正则表达式的解决方案是相当好的:)
如果你真的需要坚持使用.split和/或.raplace,那么使用/(?<=^(?:.{3})+)(?!$)/g
.split:
var arr = str.split( /(?<=^(?:.{3})+)(?!$)/ )
// [ 'abc', 'def', 'ghi', 'jkl' ]
.replace:
var replaced = str.replace( /(?<=^(?:.{3})+)(?!$)/g, ' || ' )
// 'abc || def || ghi || jkl'
/(?!$)/表示在字符串结束时不停止。没有它的:
var arr = str.split( /(?<=^(?:.{3})+)/ )
// [ 'abc', 'def', 'ghi', 'jkl' ] // is fine
var replaced = str.replace( /(?<=^(.{3})+)/g, ' || ')
// 'abc || def || ghi || jkl || ' // not fine
忽略组/(?:…)/是为了防止数组中存在重复项。没有它的:
var arr = str.split( /(?<=^(.{3})+)(?!$)/ )
// [ 'abc', 'abc', 'def', 'abc', 'ghi', 'abc', 'jkl' ] // not fine
var replaced = str.replace( /(?<=^(.{3})+)(?!$)/g, ' || ' )
// 'abc || def || ghi || jkl' // is fine
试试这个简单的代码,它会像魔法一样工作!
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);