这是我想要做的。
这样的事情:
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');
答案 0 :(得分:1)
您可以将正则表达式与替换组一起使用,一个替代方案将匹配4个以上的换行符,另一个替代方案只有2个(不在其前面或后面跟一个换行符)。
正则表达式将是:
((?:\r?\n){4,})|(^|[^\n])(?:\r?\n){2}(?!\r?\n)
解释:
((?:\r?\n){4,})
- 替代1个匹配4+序列的可选\r
后跟强制\n
|
- 或...... (^|[^\n])(?:\r?\n){2}(?!\r?\n)
- 备选方案2恰好与可选\r
的2个序列匹配,后跟不在前的强制\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>";