Javascript 用于匹配重复子字符串的单个js正则表达式?

Javascript 用于匹配重复子字符串的单个js正则表达式?,javascript,regex,string,Javascript,Regex,String,假设我有一个字符串,比如: where is mummy where is daddy 我想用空字符串替换任何一组重复的子字符串-因此在本例中,where和is元素将被删除,生成的字符串将是: mummy daddy 我想知道是否有任何一个正则表达式可以实现这一点。我尝试的正则表达式(不起作用)如下所示: /(\w+)(?=.*)\1/gi 如果第一个捕获组是任何一组单词字符,则第二个捕获组是对任何一组字符的正向前瞻(以防止这些字符包含在结果中),然后\1是对第一个匹配子字符串的反向引用

假设我有一个字符串,比如:

where is mummy where is daddy
我想用空字符串替换任何一组重复的子字符串-因此在本例中,
where
is
元素将被删除,生成的字符串将是:

mummy daddy
我想知道是否有任何一个正则表达式可以实现这一点。我尝试的正则表达式(不起作用)如下所示:

/(\w+)(?=.*)\1/gi
如果第一个捕获组是任何一组单词字符,则第二个捕获组是对任何一组字符的正向前瞻(以防止这些字符包含在结果中),然后
\1
是对第一个匹配子字符串的反向引用


任何帮助都会很好。提前谢谢

您的正则表达式不起作用,因为
\w+
不受单词边界的限制,并且
\1
反向引用尝试在“原始”单词之后匹配,这几乎是不正确的

您需要首先获取重复的单词,然后构建一个RegExp,用可选的空格(或标点符号等)匹配它们,并用空字符串替换:

var re=/(\b\w+\b)(?=.*\b\1\b)/gi;//把整个单词重复一遍
var str=‘妈妈在哪里爸爸在哪里’;
变量patts=str.match(re);//收集匹配的重复单词
var res=str.replace(RegExp(“\\s*\\b(?“+patts.join(“|”)+”)\\b、“,”);//构建替换所有找到单词的模式

document.body.innerHTML=res重复的单词是固定的,或者你想先找出重复的单词然后替换它们吗?也许吧?@gurvinder372我想先找到重复的单词然后替换它们-我想知道是否有一个正则表达式可以实现this@WiktorStribiżew匹配第一个
,其中
,但不是第二个,我想在全球范围内进行匹配。这有可能吗?所以最终的目标是
爸爸妈妈
?答案很好!不过,在玩你的代码时,我偶然发现了一个令人惊讶的问题。对单词边界的检查似乎不是第一个捕获组的一部分。因此,如果你在字符串“where is my mummy where is daddy”中使用它,“my”一词也会被删除,因为它出现在“mummy”中。为了避免误报,您必须再次在第一个捕获组的重新请求周围添加单词边界检查(var re=/(\b\w+\b)(?=.*\b\1\b)/gi)。是的,您还需要在反向引用周围添加单词边界,否则,重复单词检查不正确。我更新了答案以反映这一方面。