使用js上的regex更改除第n个换行符之外的每个换行符

时间:2016-02-07 17:33:20

标签: javascript regex

我无法弄明白,如何将每个第n个换行符更改为空格。

我有这个正则表达式代码将所有换行符更改为空格:

this.value.replace(/\n/g, ' ');

它改变了一切,但它应该改变除第3个之外的每个换行符,例如:

  • line1
  • line2
  • li3
  • li4
  • li5
  • LI6

这些行应更改为:

  • line1 line2 li3
  • li4 li5 li6

我应该用什么正则表达式来获得这些结果?

2 个答案:

答案 0 :(得分:2)

您可以将每一行捕获到单独的组中,并在第一组和第二组之后将\n替换为space

var re = /([^\n]*)\n([^\n]*)\n([^\n]*)(\n|$)/g; 
var str = 'line1\nline2\nli3\nli4\nli5\nli6';

var result = str.replace(re, '$1 $2 $3$4');

RegEx Demo

答案 1 :(得分:1)

您可以使用.replace回调函数:

function replaceLineBreaks(text) {
   var index = 1;
   return text.replace(/\n/g, function(){  
      return index++ % 3 == 0 ? '\n' : ' ';  
   });
}

var replacedText = replaceLineBreaks(text);

<强>演示:

var text = "line1\n\
  line2\n\
  line3\n\
  line4\n\
  line5\n\
  line6\n";

function replaceLineBreaks(text) {
   var index = 1;
   return text.replace(/\n/g, function() {
      return index++ % 3 == 0 ? '<br>' : ' '; //br for testing purposes
   });
}

document.body.innerHTML = replaceLineBreaks(text);