这就是我想做的。
- 将超过 3 个换行符替换为 3 个换行符。
- 将 2 个换行符替换为 1 个换行符。
- 忽略单行换行符。
所以像这样:
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/