正如标题所说,我有一个字符串,我想把它分成n个字符的片段。
例如:
var str = 'abcdefghijkl';
当n=3时,它会变成
var arr = ['abc','def','ghi','jkl'];
有办法做到这一点吗?
正如标题所说,我有一个字符串,我想把它分成n个字符的片段。
例如:
var str = 'abcdefghijkl';
当n=3时,它会变成
var arr = ['abc','def','ghi','jkl'];
有办法做到这一点吗?
当前回答
许多人也会因此举遗憾 console.log (str.match (/ . {130 / g);
注意:对于不是3倍数的字符串长度,使用{1,3}而不是{3}来包含余数,例如:
console.log (abcd .match (/ {1,3} / g));// ["abc", "d"]
还有一些微妙之处:
如果字符串可能包含换行符(希望将换行符作为字符计算,而不是分割字符串),则。不会捕获这些。使用/[\s\ s]{1,3}/代替。(谢谢@Mike)。 如果字符串为空,则match()将返回空数组。通过添加||[]来防止这种情况。
所以你可能会得到:
var str = 'abcdef \t\r\nghijkl'; var parts = str.match(/[\s\S]{1,3}/g) ||[]; 控制台.log(零件); console.log(''.match(/[\s\S]{1,3}/g) ||[]);
其他回答
如果你真的需要坚持使用.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
str.match(/.{3}/g); // => ['abc', 'def', 'ghi', 'jkl']
我最喜欢的答案是gouder hicham的。但我稍微修改了一下,让它更有意义。
let myString = "Able was I ere I saw elba";
let splitString = [];
for (let i = 0; i < myString.length; i = i + 3) {
splitString.push(myString.slice(i, i + 3));
}
console.log(splitString);
下面是该代码的一个功能化版本。
function stringSplitter(myString, chunkSize) {
let splitString = [];
for (let i = 0; i < myString.length; i = i + chunkSize) {
splitString.push(myString.slice(i, i + chunkSize));
}
return splitString;
}
以及函数的用法:
let myString = "Able was I ere I saw elba";
let mySplitString = stringSplitter(myString, 3);
console.log(mySplitString);
结果是:
>(9) ['Abl', 'e w', 'as ', 'I e', 're ', 'I s', 'aw ', 'elb', 'a']
function chunk(er){
return er.match(/.{1,75}/g).join('\n');
}
上面的函数是我用于Base64分块的。它将创建一个每75个字符的换行符。
var b1 = "";
function myFunction(n) {
if(str.length>=3){
var a = str.substring(0,n);
b1 += a+ "\n"
str = str.substring(n,str.length)
myFunction(n)
}
else{
if(str.length>0){
b1 += str
}
console.log(b1)
}
}
myFunction(4)