在JavaScript中将多个\n替换为1

maz*_*lix 6 javascript regex jquery

如何\n用一个替换多个?因此,如果用户输入

blah 

blahdy blah



blah blah
Run Code Online (Sandbox Code Playgroud)

我希望它最终看起来像.

blah
blahdy blah
blah blah
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用while()循环,但宁愿使用正则表达式,因为我相信它更有效.

Dan*_*Tao 13

这对我有用:

string = string.replace(/\n+/g, '\n');
Run Code Online (Sandbox Code Playgroud)

正如其他人所说,它只用一个替换一个或多个连续换行符(\n+)的每次出现.

g"全局"替换的效果,意味着它替换字符串中的所有匹配而不是第一个匹配.

编辑:如果您还想考虑其他操作系统的行结束样式(例如\r\n),您可以执行多步替换:

string = string.replace(/(\r\n)+/g, '\r\n') // for Windows
    .replace(/\r+/g, '\r')                  // for Mac OS 9 and prior
    .replace(/\n+/g, '\n');                 // for everything else
Run Code Online (Sandbox Code Playgroud)

或者(感谢Renesis的这个想法):

string = string.replace(/(\r\n|\r|\n)+/g, '$1');
Run Code Online (Sandbox Code Playgroud)

如果你事先知道你正在处理什么样的文本,上面的内容可能有点过分,因为它带来明显的性能成本.


Nic*_*ole 5

只需使用字符类替换一个或多个\n\r单个\n:

var newString = oldString.replace(/[\n\r]+/g, "\n");
Run Code Online (Sandbox Code Playgroud)

测试HTML:

<script>
function process(id) {
    var oldString = document.getElementById(id).value;
    var newString = oldString.replace(/[\n\r]+/g, "\n");
    return newString;
}
</script>
<textarea id="test"></textarea>
<button onclick="alert(process('test'));">Test</button>
Run Code Online (Sandbox Code Playgroud)

请注意:在现代网络和大多数现代应用程序中,\n优雅地处理单行结尾,这就是为什么我在这里使用它作为我的替换字符串.但是,CR + LF(\r\n)操作系统上的一些更原始的应用程序将显示所有文本在没有完整的\r\n情况下一起运行,在这种情况下,您可以使用Dan Tao的答案,该答案提供了保留行结尾的解决方案,或者以下内容,它们实现了一次通话中的类似事情:

string.replace(/(\r\n|\r|\n)+/g, "$1");
Run Code Online (Sandbox Code Playgroud)