正如标题所说,我有一个字符串,我想把它分成n个字符的片段。
例如:
var str = 'abcdefghijkl';
当n=3时,它会变成
var arr = ['abc','def','ghi','jkl'];
有办法做到这一点吗?
正如标题所说,我有一个字符串,我想把它分成n个字符的片段。
例如:
var str = 'abcdefghijkl';
当n=3时,它会变成
var arr = ['abc','def','ghi','jkl'];
有办法做到这一点吗?
当前回答
一些不使用正则表达式的干净解决方案:
/**
* Create array with maximum chunk length = maxPartSize
* It work safe also for shorter strings than part size
**/
function convertStringToArray(str, maxPartSize){
const chunkArr = [];
let leftStr = str;
do {
chunkArr.push(leftStr.substring(0, maxPartSize));
leftStr = leftStr.substring(maxPartSize, leftStr.length);
} while (leftStr.length > 0);
return chunkArr;
};
使用示例—https://jsfiddle.net/maciejsikora/b6xppj4q/。
我还尝试将我的解决方案与被选为正确答案的regexp进行比较。可以在jsfiddle - https://jsfiddle.net/maciejsikora/2envahrk/上找到一些测试。测试表明这两种方法具有相似的性能,可能乍一看regexp解决方案稍微快一点,但请自行判断。
其他回答
一些不使用正则表达式的干净解决方案:
/**
* Create array with maximum chunk length = maxPartSize
* It work safe also for shorter strings than part size
**/
function convertStringToArray(str, maxPartSize){
const chunkArr = [];
let leftStr = str;
do {
chunkArr.push(leftStr.substring(0, maxPartSize));
leftStr = leftStr.substring(maxPartSize, leftStr.length);
} while (leftStr.length > 0);
return chunkArr;
};
使用示例—https://jsfiddle.net/maciejsikora/b6xppj4q/。
我还尝试将我的解决方案与被选为正确答案的regexp进行比较。可以在jsfiddle - https://jsfiddle.net/maciejsikora/2envahrk/上找到一些测试。测试表明这两种方法具有相似的性能,可能乍一看regexp解决方案稍微快一点,但请自行判断。
我的解决方案(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);
干杯
这里我们每隔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 str = 'abcdefghijkl';
var res = str.match(/.../g)
console.log(res)
这里点的数量决定了你想在每个单词中包含多少文本。
试试这个简单的代码,它会像魔法一样工作!
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);