使用javascript在每个第n个换行符处拆分字符串

时间:2017-09-29 17:48:25

标签: javascript regex split

我正在寻找在每个第n个换行符拆分字符串的解决方案。 假设我有一个有六行的字符串

"One\nTwo\nThree\nFour\nFive\nSix\n"

所以在第3次突破时分裂会给我一些像

"One\nTwo\nThree\n" and "Four\nFive\nSix\n"

我已经找到了解决方案,可以在第n个字符处执行此操作,但我无法确定第n个中断发生的字符长度。 我希望我的问题很清楚。 感谢。

2 个答案:

答案 0 :(得分:2)

不是使用String.prototype.split,而是使用String.prototype.match方法更容易:

"One\nTwo\nThree\nFour\nFive\nSix\n".match(/(?=[\s\S])(?:.*\n?){1,3}/g);

demo

模式细节:

(?=[\s\S]) # ensure there's at least one character (avoid a last empty match)

(?:.*\n?)  # a line (note that the newline is optional to allow the last line)

{1,3} # greedy quantifier between 1 and 3
      # (useful if the number of lines isn't a multiple of 3)

使用Array.prototype.reduce的其他方式:

"One\nTwo\nThree\nFour\nFive\nSix\n".split(/^/m).reduce((a, c, i) => {
    i%3  ?  a[a.length - 1] += c  :  a.push(c);
    return a;
}, []);

答案 1 :(得分:1)

直接:

(?:.+\n?){3}

请参阅a demo on regex101.com

<小时/> 细分,这说:

(?:  # open non-capturing group
.+   # the whole line
\n?  # a newline character, eventually but greedy
){3} # repeat the group three times