【问题标题】:Given a specific regular expression, how I can make the search stop if a certain word is reached?给定一个特定的正则表达式,如果达到某个单词,我如何使搜索停止?
【发布时间】:2013-11-12 20:30:59
【问题描述】:

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

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

  • Foo(见 Foo 栏)
  • 酒吧(见 Foo 酒吧)
  • 美食吧

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

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

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

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

...%SEARCH% 被替换为搜索词。

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

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

我做错了什么?

注意事项:

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

【问题讨论】:

    标签: regex


    【解决方案1】:

    很抱歉没有为您提供完整的工作代码,但这是我解决此问题的方法。

    与其试图找到一个复杂的正则表达式来避免在(see...) 之后进行搜索,不如分两步完成:

    1. 在可选之前查找子字符串(see...)
    2. 在子字符串中查找并突出显示您的搜索词

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      • 2018-08-04
      相关资源
      最近更新 更多