JavaScript:如何使用正则表达式从字符串中删除空行? [关闭]

问题描述 投票:42回答:3

我需要使用JavaScript删除HTML文本框中的空行。空白行可以位于textarea元素中的任何位置。空行可以只是返回或空格加返回。

我期待一个正则表达式解决方案。这是我尝试过的一些,但它们不起作用,无法弄清楚原因:

/^\s*\r?\n/g   

/^\s*\r?\n$/g

编辑1

似乎aaronman和m.buettner建议的解决方案(我稍微修改了一下)有效:

string.replace(/^\s*\n/gm, "") 

有人能说出为什么我的第一个正则表达式无效吗?

编辑2

在阅读了所有有用的答案之后,我想出了这个:

/^[\s\t]*(\r\n|\n|\r)/gm

这是否会涵盖所有情况?

编辑3

这是最简洁的一个,涵盖所有空间(空白,制表符)和平台(Linux,Windows,Mac)。

/^\s*[\r\n]/gm

非常感谢m.buettner!

javascript regex blank-line
3个回答
64
投票

你的模式似乎没问题,你只需要包含多线修改器m,这样^$也会匹配行的开头和结尾:

/^\s*\n/gm

没有m,锚点只匹配字符串开头和结尾。

请注意,您错过了Mac行结尾(仅限\r)。在这种情况下,这将有所帮助:

/^\s*[\r\n]/gm

还要注意(在这两种情况下)你不需要明确地匹配\r前面的可选\n,因为这是由\s*处理的。

正如Dex在评论中指出的那样,如果它只包含空格(并且之后没有换行符),则无法清除最后一行。解决这个问题的方法是使实际的换行符可选,但在它之前包含一个行尾锚点。在这种情况下,您必须匹配正确结束的行,但:

/^\s*$(?:\r\n?|\n)/gm

17
投票

我相信这会奏效

searchText.replace(/(^[ \t]*\n)/gm, "")

5
投票

这应该是我认为的伎俩:

var el = document.getElementsByName("nameOfTextBox")[0];
el.value.replace(/(\r\n|\n|\r)/gm, "");

编辑:删除三种类型的换行符。

© www.soinside.com 2019 - 2024. All rights reserved.