4

查找在同一行重复的单词的正则表达式是什么?

我尝试了一些在 Stack Overflow 上找到的表达式,例如this,但没有一个能正常工作。

我想要达到的结果:

在此处输入图像描述

4

4 回答 4

20

此正则表达式将查找您要突出显示的单词。(示例是用 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>' });
于 2013-05-06T19:58:29.117 回答
1

例如,如果您想在一个之后查找多个单词,

山姆went went to to to他的生意

你可以使用这个正则表达式:

s = "Sam went went to to to his business";
a = s.match(/\b(\w+)(\s\1)+\b/g);
于 2020-04-12T12:36:20.350 回答
0

在没有示例字符串的情况下,让我们使用一个测试用例和一些示例来说明如何实现这一点。

细绳

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

正则表达式

^(詹姆斯)$

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

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

(?<=James.*)(James)

仅当单词以“James”后跟任何字符时才会检测到单词 James。根据您的引擎,“。” (句点) 默认情况下应该匹配任何不是换行符的字符。这将搜索限制在一行。

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

编辑试试这个,这是一个doozy..

(?<=^|\s+\1\s+.*)\s+(\w+)

使用正向后视(如示例 2)我们检测与我们当前组匹配的“整个单词”。一个完整的词定义为:

  • 我们现在的话
  • 至少有 1 个空格字符或行首
  • 后跟至少 1 个空格

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

就结果而言,每次匹配都会是一个重复的单词。

于 2013-05-02T08:49:54.720 回答
-1

您可以使用此正则表达式查找相邻的连续单词。

例如:"My name is Prince Prince, and I love cats."下面的正则表达式会找到Prince Prince. 这最简单的版本。

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

于 2021-06-28T07:08:59.537 回答