如何只用一个替换多个\n
?因此,如果用户输入
blah
blahdy blah
blah blah
我希望它最终看起来像。
blah
blahdy blah
blah blah
我知道我可以使用while()循环但是宁愿使用正则表达式,因为我相信它更有效。
答案 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,' ');