javascript - 正则表达式替换多个后续换行符

标签 javascript regex

这就是我想做的。

  1. 将超过 3 个换行符替换为 3 个换行符。
  2. 将 2 个换行符替换为 1 个换行符。
  3. 忽略单行换行符。

所以像这样:

Dear Bob



I would love to not have so many line breaks here.

This is a new paragraph.




Thanks

Jim

最终的结果更像是这样:

Dear Bob

I would love to not have so many line breaks here.
This is a new paragraph.

Thanks
Jim

根据另一个问题,这是我最接近的,但不太正确:

innerHTML.replace(/\n\n\s*\n\n/g, '\n');

最佳答案

您可以使用带有交替组的正则表达式,一种替代方案将匹配 4 个以上的换行符,而另一种则仅匹配 2 个(前面或后面都没有换行符)。

正则表达式将是:

((?:\r?\n){4,})|(^|[^\n])(?:\r?\n){2}(?!\r?\n)

说明:

  • ((?:\r?\n){4,}) - 替代方案 1 匹配可选 \r 的 4 个以上序列,后跟强制 \n
  • | - 或...
  • (^|[^\n])(?:\r?\n){2}(?!\r?\n) - 替代方案 2 精确匹配可选的 2 个序列\r 后跟一个前面不带的强制 \n ((^|[^\n]) 匹配字符串的开头或\n 以外的字符),后面也没有换行符(负向前视 (?!\r?\n) 确保这一点)。

在替换中,有一个回调检查哪个替代项匹配并相应地替换。

JS代码演示如下:

var re = /((?:\r?\n){4,})|(^|[^\n])(?:\r?\n){2}(?!\r?\n)/g; 
var str = `Dear Bob



I would love to not have so many line breaks here.

This is a new paragraph.




Thanks

Jim`;
var result = str.replace(re, function (m, g1, g2) {
	return g1 ? "\n\n" : g2 + "\n";
});
document.body.innerHTML = "<pre>" + result + "</pre>";

关于javascript - 正则表达式替换多个后续换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36295410/

相关文章:

javascript - 返回具有唯一值的名称字符串

正则表达式:捕获括号内的任何内容,以及嵌套括号

javascript - 同时运行 2 个 html 视频 JS

javascript - 输入时占位符不会消失

python - 相当于 Ruby 中 Python 的 findall() 方法?

ruby - 如何简化这个正则表达式?

javascript - 使用jbuilder访问子对象有很多关系

javascript - 使用Protractor进行AngularJS测试-使用browser.wait()

javascript - 无法使用 'in' 运算符搜索错误

regex - Django 搜索存储在模型中的正则表达式列表