Regex Negative Lookahead问题

时间:2014-05-24 01:58:08

标签: regex negative-lookahead

我认为这在任何情况下都不会得到我想要的结果,称为负向前瞻(regex的新手)。我试图用它取消资格或取消整个团体的资格

(?(?!The | Cross)(\ w +)Street)

所以我想在街道或银行街而不是街道或十字街时捕捉街头集团。

我对String'The Street'的了解是

  • 街道:'他街'
同样对于'Cross Street',我得到了

  • 街道:'罗斯街'

我正在寻找的是不匹配,即'你的模式没有附加子串'

有没有办法以这种方式使用负向前瞻?换句话说,AnyWord Street与我的模式匹配,The Street和Cross Street不匹配,并且返回零匹配,没有标签值。

2 个答案:

答案 0 :(得分:1)

使用单词边界(\b)会给你你想要的东西。

Javascript示例:

/(?!The|Cross)(\b\w+ )Street/.test('Main Street')
// => true
/(?!The|Cross)(\b\w+ )Street/.test('Bank Street')
// => true
/(?!The|Cross)(\b\w+ )Street/.test('The Street')
// => false
/(?!The|Cross)(\b\w+ )Street/.test('Cross Street')
// => false

答案 1 :(得分:0)

您的要求含糊不清。 你已经写过"我想在街道或银行街而不是街道或十字街的街道上捕捉街头集团"。

这种情况可以减少到

  1. "我想在街道或银行街"或
  2. "我想抓住STREET小组,当它不是The Street或Cross Street"。
  3. 这些变体与另一种变体不同。

    但是你的代码示例倾向于第二种选择。 这就是为什么以下答案是第二选择的原因。

    示例对应于Perl语法:

     /(?<!The|oss)\s+Street/
    

    说明:在Perl中,lookbehind(?&lt; = fixed-regexp)仅适用于固定宽度的正则表达式。 因此字符&#34; Cr&#34;来自&#34; Cross&#34;被删除了。

    来自&#34; Cross&#34;的正则表达式的弱化到&#34; oss&#34;可以避免如下:

     /(?<!The)(?<!Cross)\s+Street/