在JS中使用正则表达式更改除第n个换行符以外的所有换行符

4
我无法理解如何将每第n个换行符转换为空格。 我有一个正则表达式代码可以将所有的换行符更改为空格:
this.value.replace(/\n/g, ' ');

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

  • line1
  • line2
  • li3
  • li4
  • li5
  • li6

这些行应该被更改为:

  • line1 line2 li3
  • li4 li5 li6

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


我会创建一个行数组,然后根据您的要求对元素进行分组和连接。 - Felix Kling
2个回答

2
你可以将每行分为单独的组,然后将第一组和第二组之后的\n 替换为空格:
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');
正则表达式演示

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


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