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

x4shl7ld  于 2022-12-21  发布在  Java
关注(0)|答案(5)|浏览(175)

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

非常感谢比特纳先生!

ntjbwcob

ntjbwcob1#

您的模式看起来不错,您只需要包括多行修饰符m,以便^$也匹配行的开始和结束:

/^\s*\n/gm

如果没有m,锚只匹配字符串的开始和结束。
注意,您错过了UNIX风格的行尾(只有\r)。

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

还要注意(在这两种情况下),您不需要显式地匹配\n前面的可选\r,因为这由\s*处理。
正如Dex在注解中指出的,如果最后一行只包含空格(并且后面没有换行符),那么这将无法清除最后一行。解决这个问题的一个方法是使实际的换行符可选,但在它之前包含一个行尾锚。在这种情况下,您 * 必须 * 正确匹配行尾:

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

gorkyyrv2#

我相信这会成功的

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

lyr7nygr3#

我想这应该可以了:

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

**EDIT:**删除三种类型的换行符。

50pmv0ei

50pmv0ei4#

下面是another solution

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

它似乎可以处理空行和只有空格的行。

yqkkidmi

yqkkidmi5#

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');

相关问题