我认为这在任何情况下都不会得到我想要的结果,称为负向前瞻(regex的新手)。我试图用它取消资格或取消整个团体的资格
(?(?!The | Cross)(\ w +)Street)
所以我想在街道或银行街而不是街道或十字街时捕捉街头集团。
我对String'The Street'的了解是
我正在寻找的是不匹配,即'你的模式没有附加子串'
有没有办法以这种方式使用负向前瞻?换句话说,AnyWord Street与我的模式匹配,The Street和Cross Street不匹配,并且返回零匹配,没有标签值。
答案 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)
您的要求含糊不清。 你已经写过"我想在街道或银行街而不是街道或十字街的街道上捕捉街头集团"。
这种情况可以减少到
这些变体与另一种变体不同。
但是你的代码示例倾向于第二种选择。 这就是为什么以下答案是第二选择的原因。
示例对应于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/