【问题标题】:Negative lookbehind in javascriptjavascript中的负向回溯
【发布时间】:2018-03-22 17:07:31
【问题描述】:

我正在使用以下正则表达式:

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, 我相信负面的后视会起作用,但我无法弄清楚正则表达式会是什么。

任何帮助将不胜感激!

【问题讨论】:

  • 酷,非常感谢@WiktorStribiżew,这似乎有效!谢谢一百万!
  • 我发布了答案,见下文。

标签: javascript regex


【解决方案1】:

(?!(download$)) 部分 by itself 在这里没有做正确的事情,因为如果有 download 并且字符串的结尾紧邻最后一个匹配的 / 右侧,则匹配失败。您需要将最后一个子部分与消费模式实际匹配以实际匹配文件名。

你可以使用

/https:\/\/(dev-|stag-)?(assets|images)\.server\.io\/v\d\/file\/(.*?)\/(?!download$)[^\/]+$/
                                                                     ^^^^^^^^^^^^^

请参阅regex demo。如果您需要匹配整个字符串,请在模式的开头添加 ^ 锚点。 s 也可以在 ? 后面加上可选的。

详情

  • https:\/\/ - https:// 子字符串
  • (dev-|stag-)? - 可选的 dev-stag- 子字符串
  • (assets|images) - assetsimages 子字符串
  • \.server\.io\/v - .server.io/v 子字符串
  • \d - 任何数字
  • \/file\/ - /file/ 子字符串
  • (.*?) - 除换行符以外的任何 0+ 字符,尽可能少
  • \/ - 一个/
  • (?!download$) - 不能有 download 子字符串紧跟当前位置右侧的字符串位置
  • [^\/]+ - 除了/ 之外的 1 个或多个字符,尽可能多
  • $ - 字符串结束。

请注意,[\d] 的可读性低于 \d,如果要匹配文字点字符,则需要对模式中的 . 符号进行转义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 2012-03-03
    • 2017-08-23
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多