2013-10-30 89 views
2

我正在寫一個短的動態腳本塊,使得年初匹配協議相對URL確定一個URL要麼啓動:正則表達式在字符串

  • HTTP
  • HTTPS
  • 沒有HTTP/HTTPS,而僅僅只是//技術

我的正則表達式到目前爲止:

/^(http|https|://)youtube.com|vimeo.com.*$/ 

所以,我可以給它:

  • http://youtube.com
  • https://youtube.com
  • //youtube.com

...它會工作

我知道這幾乎是有,但如何我可以在t開始時說出「http/https還是斜槓」他串?然後在這些URL之後。

+0

'/ ^(HTTPS:?)?\/\ /'... – pawel

回答

1

如果你想知道什麼地方錯了你的正則表達式,這裏有一個解釋:

/^(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.*$/ 
1

你可以試試這個正則表達式:

/^(https?:)?\/\/(?:youtube|vimeo)\.com.*$/i 
+0

他希望哈希和查詢字符串了。他的嘗試是'。* $'' –

+0

@RoyiNamir:謝謝編輯它。 – anubhava