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

时间:2013-05-04 01:17:04

标签: javascript regex blank-line

我需要使用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!

5 个答案:

答案 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)

这是another solution

string = string.replace(/^(?=\n)$|^\s*|\s*$|\n\n+/gm, "")

它似乎可以处理空行和纯空格行。