我需要使用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!
答案 0 :(得分:65)
您的模式似乎没问题,您只需要包含多行修饰符m
,以便^
和$
匹配行的开头和结尾:
/^\s*\n/gm
没有m
,锚点只匹配字符串开头和结尾。
请注意,您错过了Mac行结尾(仅\r
)。在这种情况下,这将有所帮助:
/^\s*[\r\n]/gm
另请注意(在这两种情况下)您不需要明确地匹配\r
前面的可选\n
,因为\s*
需要这样做。< / p>
如注释中指出Dex,如果它只包含空格(并且后面没有换行符),则无法清除最后一行。解决这个问题的方法是使实际的换行符可选,但在它之前包含一个行尾锚点。在这种情况下, do 必须匹配正确结束的行:
/^\s*$(?:\r\n?|\n)/gm
答案 1 :(得分:17)
我相信这会有用
searchText.replace(/(^[ \t]*\n)/gm, "")
答案 2 :(得分:5)
这应该是我认为的伎俩:
var el = document.getElementsByName("nameOfTextBox")[0];
el.value.replace(/(\r\n|\n|\r)/gm, "");
编辑:删除三种类型的换行符。
答案 3 :(得分:0)
function removeEmptyLine(text) {
return text.replace(/(\r?\n)\s*\1+/g, '$1');
}
测试:
console.assert(removeEmptyLine('a\r\nb') === 'a\r\nb');
console.assert(removeEmptyLine('a\r\n\r\nb') === 'a\r\nb');
console.assert(removeEmptyLine('a\r\n \r\nb') === 'a\r\nb');
console.assert(removeEmptyLine('a\r\n \r\n \r\nb') === 'a\r\nb');
console.assert(removeEmptyLine('a\r\n \r\n 2\r\n \r\nb') === 'a\r\n 2\r\nb');
console.assert(removeEmptyLine('a\nb') === 'a\nb');
console.assert(removeEmptyLine('a\n\nb') === 'a\nb');
console.assert(removeEmptyLine('a\n \nb') === 'a\nb');
console.assert(removeEmptyLine('a\n \n \nb') === 'a\nb');
console.assert(removeEmptyLine('a\n \n2 \n \nb') === 'a\n2 \nb');
答案 4 :(得分:0)