我正在使用以下正则表达式:
https://(dev-|stag-|)(assets|images).server.io/v[\d]/file/(.*?)/(?!(download$))
目的是匹配Url 1& 3完全,但不是Url 2 ,但它似乎不起作用。
通过检查以下答案: Javascript regex negative look-behind, Regex: match everything but, 我认为负面的后视可行,但我无法弄清楚这是什么样的正则表达式。
非常感谢任何帮助!
答案 0 :(得分:1)
(?!(download$))
部分by itself在这里没有做正确的事情,因为如果有download
并且字符串结尾紧接着最后一个{{1匹配。您需要将最后一个子部分与消耗模式实际匹配,以实际匹配文件名。
您可以使用
/
请参阅regex demo。如果需要匹配整个字符串,请在模式的开头添加/https:\/\/(dev-|stag-)?(assets|images)\.server\.io\/v\d\/file\/(.*?)\/(?!download$)[^\/]+$/
^^^^^^^^^^^^^
锚点。 ^
后面的s
也可以选择?
。
<强>详情
https:\/\/
- https://
子字符串(dev-|stag-)?
- 可选的dev-
或stag-
子字符串(assets|images)
- assets
或images
substring \.server\.io\/v
- .server.io/v
子字符串\d
- 任意数字\/file\/
- /file/
子字符串(.*?)
- 除了换行符之外的任何0 +字符,尽可能少\/
- /
(?!download$)
- 当前位置右侧的字符串位置后面不能有download
子字符串[^\/]+
- 尽可能多的/
以外的一个或多个字符$
- 字符串结束。请注意[\d]
的可读性低于\d
,如果您想匹配文字点字符,则需要在模式中转义.
符号。