说我有一个具有x个字符的任意字符串。如何在每个y个字符的字符串中插入换行符?我只想包装字符串,这样:
xageaojigeaogjieaogjieaogjoajgoeajgoeagjaegaogjeaovc
成为
xageaoj
igeaogj
ieaogji
eaogjoa
jgoeajg
oeagjae
gaogjea
ovc
如果换行计数为7,一种方法是遍历字符串,然后推入数组,如下所示:
const wrap = (count, str) => {
const letters = [], ln = str.length;
for(let i = 0; i < ln; i++){
letters.push(str[i]);
if(i%count === 0)
letters.push('\n');
}
return letters.join('');
};
但是有更好/更简单的方法吗?
答案 0 :(得分:2)
您可以使用正则表达式.replace
:
const input = 'xageaojigeaogjieaogjieaogjoajgoeajgoeagjaegaogjeaovc';
console.log(input.replace(/.{8}/g, '$&\n'));
这是什么,每8个字符被匹配(用.{8}
),然后第二个参数中的'$&'
表示匹配的整个子字符串。因此,只需将\n
附加到末尾,每8个字符将被这8个字符和换行符替换。您还可以像这样插入匹配的 groups ,请参见the docs。
答案 1 :(得分:1)
另一种方法可能是将String#slice
与指示符用于下一个切片索引。
const wrap = (str, count) => {
var letters = [],
i = 0;
while (i < str.length) {
letters.push(str.slice(i, i+= count));
}
return letters.join('\n');
};
console.log(wrap('xageaojigeaogjieaogjieaogjoajgoeajgoeagjaegaogjeaovc', 7));
答案 2 :(得分:1)
您可以使用正则表达式来匹配7个字符,并将其替换为匹配项,然后再换行
str.replace(/(.{7})/g, "$1\n")
或在您的代码中
const wrap = (str, count) =>
str.replace(new RegExp(`(.{${count}})`, "g"), "$1\n")
答案 3 :(得分:1)
RegExp
+ Array.prototype.join
版本:
const wrap = (raw, n) => raw.match(new RegExp(`.{1,${n}}`, 'g')).join('\n')
const source = 'xageaojigeaogjieaogjieaogjoajgoeajgoeagjaegaogjeaovc'
console.log(wrap(source, 7))