查找在同一行重复的单词的正则表达式是什么?
我尝试了一些在 Stack Overflow 上找到的表达式,例如this,但没有一个能正常工作。
我想要达到的结果:
此正则表达式将查找您要突出显示的单词。(示例是用 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>' });
例如,如果您想在一个之后查找多个单词,
山姆
went went
to to to
他的生意
你可以使用这个正则表达式:
s = "Sam went went to to to his business";
a = s.match(/\b(\w+)(\s\1)+\b/g);
在没有示例字符串的情况下,让我们使用一个测试用例和一些示例来说明如何实现这一点。
细绳
我的名字是詹姆斯,詹姆斯是我的名字
正则表达式
^(詹姆斯)$
第 1 组(0 通常是完整的匹配字符串,可能没有捕获计数)被捕获两次。这意味着这个词被重复了。您用于执行正则表达式的工具中需要一些逻辑,以确定您是否对“单词”感兴趣。
使用相同的字符串,考虑这个正则表达式
(?<=James.*)(James)
仅当单词以“James”后跟任何字符时才会检测到单词 James。根据您的引擎,“。” (句点) 默认情况下应该匹配任何不是换行符的字符。这将搜索限制在一行。
请注意必须准确指定单词的限制。我不知道如何解决这个问题。
编辑试试这个,这是一个doozy..
(?<=^|\s+\1\s+.*)\s+(\w+)
使用正向后视(如示例 2)我们检测与我们当前组匹配的“整个单词”。一个完整的词定义为:
此外,我们所在的匹配项必须是一个独立的单词(前面至少有一个空格字符)。
就结果而言,每次匹配都会是一个重复的单词。
您可以使用此正则表达式查找相邻的连续单词。
例如:"My name is Prince Prince, and I love cats."
下面的正则表达式会找到Prince Prince
. 这是最简单的版本。
(\w+)(\s\1)+