2017-06-06 217 views
1

我知道如何匹配以“/ status”结尾的字符串:^.*status$正则表达式匹配字符串与子字符串“/状态”,除非它包含“订阅/状态”

但是,我不希望这适用于以“subscription/status”结尾的字符串。

非常感谢您的帮助!

编辑:我正在使用Javascript库来执行mongoDB查询。这是我到目前为止有:

const query = { 
    "handler_url_str": { 
    "$regex": "^.*status$" 
    } 
}; 

不幸的是,这种匹配,在“/状态”结束所有文件。

+0

末? –

+0

我正在通过JavaScript库执行mongodb查询。将相应地更新我的帖子 – robinnnnn

回答

2

您可以使用

"$regex": /^(?!.*subscription\/status$).*\/status$/ 

regex demo

详细

  • ^ - 字符串的开始
  • (?!.*subscription/status$) - 负先行失败的比赛之后,是否任何其他0+字符一个换行字符(.*),有subscription/status在字符串
  • .*的端部 - 比换行符字符其他
  • /status任何0+字符 - 文字串
  • $ - 字符串的结尾。
+0

你的答案不起作用,但你的演示没有。我认为你的意思是包括逃避的正斜杠 – robinnnnn

+1

@robinnnnn:你的意思是你使用了'“$ regex”:/^(?!.* subscription \/status $)。* \/status $ /'? –

+1

是的,正斜线必须用反斜杠 –

1

"$regex": "^.*(?<!subscription)\/status$" 

说明
  • ^.* - 开始与零个或多个字符
  • 其次
    • (?<!subscription)\/status - /status不是由前面subscription
  • $ - 模式
  • 您正在使用什么语言
+0

'(?!subscription)'在这种模式下是多余的,它只有在*看起来*后面时才起作用。 –

+0

@WiktorStribiżew更新 –

+0

@ShammelLee我试过这个,但结束了“之前的令牌不可量化”错误:https://regex101.com/r/dA6hfQ/2 – robinnnnn

相关问题