每x个字符创建一个新行

3

假设我有一个任意长度为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('');
};

但是有没有更好/更简单的方法来做到这一点呢?

4个回答

5

您可以使用正则表达式.replace

const input = 'xageaojigeaogjieaogjieaogjoajgoeajgoeagjaegaogjeaovc';
console.log(input.replace(/.{8}/g, '$&\n'));

这段代码的作用是,每8个字符进行匹配(使用.{8}),然后第二个参数中的'$&'表示被匹配的整个子字符串。因此,在末尾添加一个\n,每8个字符将被替换为这8个字符加上一个换行符。您还可以像这样插入匹配的分组等内容 - 请参见文档

谢谢,你能解释一下那个正则表达式是如何工作的吗?$&具体是做什么的? - user5047085
这很棒,会试一下,墨西哥风格。 - user5047085

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))


0
你可以使用正则表达式来匹配7个字符,并将其替换为匹配的内容后面加上一个新行。
str.replace(/(.{7})/g, "$1\n")

或者在你的代码中

const wrap = (str, count) =>
    str.replace(new RegExp(`(.{${count}})`, "g"), "$1\n")

0

另一种方法是使用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));


是的,我决定将数字/整数作为第一个参数,这样更容易阅读,看起来很漂亮。 - user5047085
如果count有一个默认值,那会更好。 - undefined
是的,而且我在原始帖子中提供的解决方案也失败了,因为0%0 === 0。 - user5047085
或者等一下,实际上它等于NaN,不知道为什么我得到一个换行符作为第二个字符,嗯嗯 - user5047085

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接