2

根据regular-expressions.info,我应该能够使用以下模式删除重复的行(只要它们是连续的):^(.*)(\r?\n\1)+$

这在 Notepad++ 中非常简单,我只需点击“全部替换”\1并删除所有重复项。但是,当从<textarea>.

var t = $("#input").val();
var re = /^(.*)(\r?\n\1)+$/g;
var s = t.replace(re, "$1");
console.log(s);

为什么添加g标志并没有删除所有重复的行?

4

2 回答 2

2

也使用多行修饰符:

var re = /^(.*)(\r?\n\1)+$/gm;

您的输入似乎包含多行,并且您想删除整个文本中重复的一些行。

该正则表达式中的一个条件是“行”的定义实际上是它自己行中的一个字符串(没有其他字符串占据该行的任何部分)。

因此,多行修饰符 (m) 将使^and$匹配每一行的开头和结尾,而不是整个文本。

于 2013-10-01T15:11:01.853 回答
0

正确的替换调用是:

var s = t.replace(re, "$1");

替换必须是字符串(或函数,对于更复杂的东西)

于 2013-10-01T15:00:33.533 回答