如果你想知道什麼地方錯了你的正則表達式,這裏有一個解釋:
/^(http|https|://)youtube.com|vimeo.com.*$/
第一件事的第一條:您需要封裝在YouTube | vimeo部分作爲一個組(我們將?:
添加到前面,因爲我們不想捕獲它)。否則它實際上是在尋找(^(http|https|://)youtube.com)|(vimeo.com)
這不是你想要的。此外,你會想逃避你的時間,因爲這是一個dotall角色(我假設你不想讓「youtubescom」匹配)以及你的正斜槓。
現在,我們有:
/^(http|https|:\/\/)(?:youtube\.com|vimeo\.com).*$/
所以,在這裏我們檢查,看看是否 「HTTP」, 「HTTPS」 或 「://」 開頭的字符串和出現在「youtube.com」或「vimeo.com」之前。但是,我們真正想要的是檢查是否 「的http://」, 「https://開頭」 或只是 「//」 之前談到之一:
/^(http:\/\/|https:\/\/|\/\/)(?:youtube\.com|vimeo\.com).*$/
您可以停止那是你的答案。但是,讓我們繼續通過查找冗餘進行一些清理。首先,我們的兩個域名都有「.com」,因此我們可以簡單地將該部分設爲(?:youtube|vimeo)\.com
。接下來,我們的協議前綴都有「//」,所以我們可以將其提供給:(http:|https:)\/\/
。但是,現在「http:」或「https:」必須啓動字符串。既然我們希望這些是可選的,那麼之後我們將添加一個「?」,所以我們得到(http:|https:)?\/\/
。現在,因爲那些非常接近,我們真正想要的是對於ssl,可選的「s」。最後,我們終於可以得到:
/^(https?:)?\/\/(?:youtube|vimeo)\.com.*$/
'/ ^(HTTPS:?)?\/\ /'... – pawel