正则表达式在同一行重复了一句话

时间:2013-05-02 08:39:12

标签: regex

正则表达式查找在同一行重复的单词?我已经尝试了一些我在StackOverflow上找到的this表达式,但没有一个能正常工作。

我希望我能用图像更好地解释我想要实现的结果。谢谢你的耐心等待。

enter image description here

4 个答案:

答案 0 :(得分:16)

此正则表达式将用于查找要突出显示的单词。 (例如在Javascript中,很容易在浏览器的Javascript控制台中测试。)

s = "It's a foo and a bar and a bar and a foo too.";
a = s.match(/\b(\w+)\b(?=.*\b\1\b)/g);

这将返回一个单词数组,可能是同一个单词的多次。

接下来你可以这样做:

re = new RegExp('\\b(' + a.join('|') + ')\\b', 'g');

这应该足以突出显示所有事件:

out = s.replace(re, function(m) { return '<b>' + m + '</b>' });

答案 1 :(得分:0)

例如,如果您想一个个接一个地查找多个单词 山姆went went to to to他的生意

您可以使用此正则表达式

s = "Sam went went to to to his business";
a = s.match(/\b(\w+)(\s\1)+\b/g);

答案 2 :(得分:0)

您可以使用此正则表达式来查找彼此相邻的连续单词。例如:"My name is Prince Prince, and I love cats." 下面的正则表达式会找到 Prince Prince。这是最简单的版本。

(\w+)(\s\1)+

答案 3 :(得分:-2)

如果没有示例字符串,请使用测试用例和一些如何实现此目的的示例。

字符串

  

我的名字是詹姆斯,詹姆斯是我的名字

正则表达式

  

^(詹姆斯)$

组1(0通常是完全匹配字符串,可能没有捕获计数)被捕获两次。这意味着这个词重复了。您用于执行正则表达式的工具中需要一些逻辑,以便决定如何对“单词”感兴趣。

使用相同的字符串,请考虑此正则表达式

(?<=James.*)(James)

这将检测James ONLY这个词是否由'James'跟随任何角色进行。根据您的引擎,'。' (句点)应默认匹配任何换行符。这将搜索限制在一行。

请注意必须准确指定单词的限制。我不知道如何解决这个问题。

EDIT 试试这个,这是一个很好的..

  

(小于?= ^ | \ S + \ 1 \ S + *)\ S +(\ W +)

使用正面lookbehind(如例2),我们检测到与当前组匹配的“整个单词”。整个单词定义为:

  • 我们现在的话
  • 由至少1个空格字符或在行首开始
  • 后面至少有一个空格

此外,我们所处的匹配必须是一个独立的单词(前面至少有一个空格字符)。

就结果而言,每场比赛都是重复的。