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

cur*_*us1 46 javascript regex blank-line

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

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

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

/^\s*\r?\n$/g
Run Code Online (Sandbox Code Playgroud)

编辑1

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

string.replace(/^\s*\n/gm, "") 
Run Code Online (Sandbox Code Playgroud)

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

编辑2

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

/^[\s\t]*(\r\n|\n|\r)/gm
Run Code Online (Sandbox Code Playgroud)

这是否会涵盖所有情况?

编辑3

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

/^\s*[\r\n]/gm
Run Code Online (Sandbox Code Playgroud)

非常感谢m.buettner!

Mar*_*der 70

你的模式似乎好了,你只需要包括多修改m,使^$匹配行的开头和结尾,以及:

/^\s*\n/gm
Run Code Online (Sandbox Code Playgroud)

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

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

/^\s*[\r\n]/gm
Run Code Online (Sandbox Code Playgroud)

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

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

/^\s*$(?:\r\n?|\n)/gm
Run Code Online (Sandbox Code Playgroud)

  • 如果最后一行为空,则会失败,因为没有回车符,可能是最常见的情况.需要一个问号.`/ ^\S*[\ r \n]的?/ gm` (2认同)

aar*_*man 18

我相信这会奏效

searchText.replace(/(^[ \t]*\n)/gm, "")
Run Code Online (Sandbox Code Playgroud)


Bjø*_*hen 6

这应该是我认为的伎俩:

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

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

  • \ r \n通常是windows,\n linux和\ r \n mac,如果我没记错的话. (2认同)

Pik*_*er2 5

这是一个可重用的函数,它将修剪每行的空白并删除任何空白或仅包含空格的行:

function trim_and_remove_blank_lines(string)
{
    return string.replace(/^(?=\n)$|^\s*|\s*$|\n\n+/gm, "")
}
Run Code Online (Sandbox Code Playgroud)

使用示例:

trim_and_remove_blank_lines("Line 1 \nLine2\r\n\r\nLine4\n")

//Returns 'Line 1\nLine2\nLine4'
Run Code Online (Sandbox Code Playgroud)