正则表达式忽略重复匹配

use*_*010 4 javascript regex

我有这样的字符串:

var str = "When Home is on fire go and dance in fire"
Run Code Online (Sandbox Code Playgroud)

我想检查我的字符串是否有单词homefire

为此,我使用了这个正则表达式:

var words = str.match(/(home)|(fire)/ig)
Run Code Online (Sandbox Code Playgroud)

和这样的输出:

["Home", "fire", "fire"]
Run Code Online (Sandbox Code Playgroud)

如您所见,fire匹配两次,我希望忽略重复匹配并只显示一次。

感谢您的帮助。

anu*_*ava 5

您可以使用这个基于负前瞻的正则表达式来确保仅当文本中不再存在相同的单词时才匹配所需的单词,从而匹配最后一次出现的搜索单词:

/(home|fire)(?!.*\1)/ig
Run Code Online (Sandbox Code Playgroud)

输出:

["Home", "fire"]
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

  • `\1` 是对第一个捕获组 `(home)` 的反向引用,而 `\2` 是对第二个捕获组 `(fire)` 的反向引用。 (3认同)
  • `/(home|fire)(?!.*\1)/ig` (2认同)