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

时间:2011-07-13 22:25:17

标签: javascript jquery regex

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

blah 

blahdy blah



blah blah

我希望它最终看起来像。

blah
blahdy blah
blah blah

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

6 个答案:

答案 0 :(得分:13)

这对我有用:

string = string.replace(/\n+/g, '\n');

正如其他人所说,它只用一个替换每个或更多个连续换行符(\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

(感谢Renesis这个想法):

string = string.replace(/(\r\n|\r|\n)+/g, '$1');

如果你事先知道你正在处理什么类型的文本,上面的内容可能是过度的,因为它带来明显的性能成本。

答案 1 :(得分:5)

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

var newString = oldString.replace(/[\n\r]+/g, "\n");

测试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>

请注意:在现代网络和大多数现代应用程序中,优雅地处理单个\n行结尾,这就是我在此处使用它作为替换字符串的原因。但是,CR+LF (\r\n) operating systems上的一些更原始的应用程序会显示所有文本在没有完整\r\n的情况下一起运行,在这种情况下,您可以使用Dan Tao's answer,它提供了保留行结尾的解决方案,或者跟随,在一次通话中完成类似的事情:

string.replace(/(\r\n|\r|\n)+/g, "$1");

答案 2 :(得分:3)

var blah = "blah\n\nblahdy blah\n\n\n\nblah blah\n";
var squeezed = blah.replace(/\n+/g, "\n");

答案 3 :(得分:2)

您可以使用正则表达式

xx.replace(/\n+/g, "\n");

答案 4 :(得分:1)

或者,如果没有JavaScript引擎设置有限状态机来运行正则表达式的开销,您可以使用数组执行此操作:

s = s.split("\n").join("");

答案 5 :(得分:1)

对具有详细示例的空格执行相同的操作:Regex to replace multiple spaces with a single space。例如:

var str = "The      dog        has a long tail,      and it is RED!";
str = str.replace(/ {2,}/g,' ');