正如标题所说,我有一个字符串,我想把它分成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个字符的换行符。
其他回答
这里我们每隔n个字符就在一个字符串中穿插另一个字符串:
export const intersperseString = (n: number, intersperseWith: string, str: string): string => {
let ret = str.slice(0,n), remaining = str;
while (remaining) {
let v = remaining.slice(0, n);
remaining = remaining.slice(v.length);
ret += intersperseWith + v;
}
return ret;
};
如果我们像这样使用上面的语句:
console.log(splitString(3,'|', 'aagaegeage'));
我们得到:
亚美大陆煤层气有限公司|亚美大陆煤层气有限公司| aeg |坚毅不屈| e
这里我们做同样的事情,但是push到一个数组:
export const sperseString = (n: number, str: string): Array<string> => {
let ret = [], remaining = str;
while (remaining) {
let v = remaining.slice(0, n);
remaining = remaining.slice(v.length);
ret.push(v);
}
return ret;
};
然后运行它:
console.log(sperseString(5, 'foobarbaztruck'));
我们得到:
[“fooba”、“rbazt”、“ruck”]
如果有人知道简化上述代码的方法,请使用lmk,但它应该适用于字符串。
如果你不想使用正则表达式…
var chunks = [];
for (var i = 0, charsLength = str.length; i < charsLength; i += 3) {
chunks.push(str.substring(i, i + 3));
}
jsFiddle。
...否则正则表达式的解决方案是相当好的:)
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)
str.match(/.{3}/g); // => ['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) ||[]);