使用Javascript替换文本中的多个空行

时间:2014-02-16 22:15:24

标签: javascript regex

希望这是一个简单的问题。

如果我有这样的文字:

Orange
Apples


Melons

Bananas

...如何用单个空白行替换所有出现的多个空白行,最后是这样:

Orange
Apples

Melons

Bananas

小提琴:http://jsfiddle.net/Jq4pT/ 在插入第二个框之前,需要从第一个框的输入中删除多个空白行。

我找到了this link,但我不确定如何在Javascript中使用该正则表达式?

感谢。

4 个答案:

答案 0 :(得分:2)

就这样使用它:

var inputString = '...';
var outputString = inputString.replace(/^(\s*\r\n){2,}/, "\r\n")

答案 1 :(得分:1)

这是一个老问题,但我不在乎,它首先出现在谷歌搜索中。

您可以使用以下代码执行此操作:

var EOL = string.match(/\r\n/gm)?"\r\n":"\n";
var regExp = new RegExp("("+EOL+"){3,}", "gm");
string = string.replace(regExp, EOL+EOL);
  • 首先确定要在Regex中使用的endline char
  • 正则表达式寻找EOL字符重复3次或更多次,并用2个EOL字符替换它们。
  • 使用g修饰符替换所有匹配项
  • 使用m修饰符将regex应用于整个多行字符串,而不是每行。

答案 2 :(得分:0)

使用简单的正则表达式:

str = "whatever your string is";
reg = /\n\n\n/;
str.replace(reg, "\n\n");

答案 3 :(得分:0)

<块引用>

此线程中的其他单行答案是错误的,虽然这些答案不会用 2 个新行替换所有新行序列,但只会执行一次。这些将在字符串上运行一次。这意味着如果有 6 条新线,我将再次替换 3 到 2 和接下来的 3 到 2。所以结果将是 4 个新行。然后您需要再次运行此代码,这会将 3 个新行替换为 2 个新行,剩余的 1 个新行将保持不变,因此在第二次运行后,您将有 3 个新行。如果你只运行第三次,那么你会从 6 个新行减少到 2 个。

所以正确的单行答案是这样的:

yourString.replace(/^\s*[\r\n]|^\s+| +(?= )| +$|\s+$(?![^])/gm, '\n\n');

完整样本:

const a = `





a




b





`;

const result = a.replace(/^\s*[\r\n]|^\s+| +(?= )| +$|\s+$(?![^])/gm, '\n\n');

console.log(result);

结果将如您所料:

enter image description here


为什么其他答案是错误的?看看这个:

enter image description here

所有“新行”见\n

enter image description here

替换了一些,但不是全部

enter image description here

更换了一些,但又不是全部