我需要使用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!
你的模式似乎没问题,你只需要包含多线修改器m
,这样^
和$
也会匹配行的开头和结尾:
/^\s*\n/gm
没有m
,锚点只匹配字符串开头和结尾。
请注意,您错过了Mac行结尾(仅限\r
)。在这种情况下,这将有所帮助:
/^\s*[\r\n]/gm
还要注意(在这两种情况下)你不需要明确地匹配\r
前面的可选\n
,因为这是由\s*
处理的。
正如Dex在评论中指出的那样,如果它只包含空格(并且之后没有换行符),则无法清除最后一行。解决这个问题的方法是使实际的换行符可选,但在它之前包含一个行尾锚点。在这种情况下,您必须匹配正确结束的行,但:
/^\s*$(?:\r\n?|\n)/gm
我相信这会奏效
searchText.replace(/(^[ \t]*\n)/gm, "")
这应该是我认为的伎俩:
var el = document.getElementsByName("nameOfTextBox")[0];
el.value.replace(/(\r\n|\n|\r)/gm, "");
编辑:删除三种类型的换行符。