2017-10-11 45 views
1

我使用以下正則表達式:負回顧後在JavaScript

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

目的是要匹配Url 1 & 3完全,但不是Url 2,但它似乎並沒有工作。

選中以下答案: Javascript regex negative look-behindRegex: match everything but, 我相信負回顧後發會的工作,但我無法弄清楚爲正則表達式是什麼。

任何幫助,將不勝感激!

+1

查看https://regex101.com/r/Bw8bbD/1 –

+1

很酷,非常感謝@WiktorStribiżew,這似乎工作!太感謝了! – iyerrama25

+0

我發佈了答案,見下文。 –

回答

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子字符串,緊跟在當前位置右側的字符串位置的末尾
  • [^\/]+ - 一個或多個不是0的字符,儘可能多
  • $ - 字符串結束。

注意[\d]\d的可讀性,而且你一定要逃逸模式.符號,如果你想匹配字面點字符。

+1

酷,感謝Wiktor的詳細解釋! – iyerrama25