0

我正在尝试编写一个正则表达式来查找字符串中的整个单词(匹配用户的搜索查询),但我想在达到某个单词后忽略所有内容。

想象以下可能的搜索结果列表:

  • Foo(见 Foo 酒吧)
  • 酒吧(见 Foo 酒吧)
  • 富吧

我想使用正则表达式来测试列表中的每个项目,并且我想忽略“看到”这个词之后的所有内容。例如:

  • 如果用户搜索“foo”,我想匹配第一项和第三项:
    • Foo(见 Foo 酒吧)
    • 酒吧(见 Foo 酒吧)
  • 如果用户搜索“bar”,我想匹配第二项和第三项:
    • Foo(见 Foo 酒吧)
    • 酒吧(见 Foo 酒吧)

我想出的正则表达式是这样的:

^(?!\(see)(\b%SEARCH%)

... where%SEARCH%被替换为任何搜索词。

不幸的是,这似乎并不适用于所有情况。如果搜索词位于字符串的开头(即“foo”),则似乎正确匹配项目,但如果搜索词出现在字符串的后面(即,列表中第三个项目中的“bar”)则不会.

这是一个说明问题的jsfiddle。在第一个和第三个示例中,一切都按预期工作,但在第二个示例中,第三个项目(“Foo Bar”)也应该匹配,但事实并非如此。

我究竟做错了什么?

笔记:

  • 我只想匹配整个单词,因此\b
  • 我还使用i修饰符(不区分大小写)和g修饰符(查找所有匹配项)。
4

1 回答 1

0

很抱歉没有为您提供完整的工作代码,但这是我将如何解决这个问题。

而不是试图找到一个复杂的正则表达式来避免搜索,(see...)最好分两步完成:

  1. 在可选之前查找子字符串 (see...)
  2. 在子字符串中查找并突出显示您的搜索词
于 2013-11-12T20:53:52.027 回答