2012-10-15 44 views
1

我試圖在JavaScript上匹配youtube和vimeo網址。我使用regexr玩弄與此想出了:在javascript中匹配特定網址

(http|https)://(youtu|www.youtube|vimeo|youtube)\.(be|com)/[A-Za-z0-9\?&=]+ 

它工作得很好的regexr,空格不包括在比賽所以它只會匹配這個:

http://youtu.be/ssdfsjlfsfsl 

而不是這樣的:

http://youtu.be/ssdfsjl someword 

但是當我測試它於JavaScript它仍然帶有空格的URL和另一個詞旁邊匹配:

var x = new RegExp("(http|https)://(youtu|www.youtube|vimeo|youtube)\.(be|com)/[A-Za-z0-9\?&=]+") 

x.test("http://www.youtube.com/watch?v=FvYo3ZgaQ1c&feature=plcp someword") 

不知道爲什麼會發生這種情況,我也嘗試添加\S!\s,但它似乎沒有任何效果。

+2

那不是* *也允許'vimeo.be'域和TLD(此*可能*存在,但它不是我遇到過的)。 –

+0

哎呀,謝謝你告訴我,我想它仍然需要一些修復 – user225269

回答

2

regex.test(string)返回是否有一個或多個匹配的字符串中發現了一個布爾值,所以它會(而且應該)爲"http://www.youtube.com/watch?v=FvYo3ZgaQ1c&feature=plcp someword"返回true

如果你想測試你的字符串是一個URL,只有網址,添加一些錨:

^(http|https)://(youtu|www.youtube|vimeo|youtube)\.(be|com)/[A-Za-z0-9\?&=]+$ 
2

看起來好像你正在檢查字符串的開始/結束。使用^$

var x = new RegExp("^(http|https)://(youtu|www.youtube|vimeo|youtube)\.(be|com)/[A-Za-z0-9\?&=]+$") 
1

那是因爲你還沒有固定的表達。

^(http|https)://(youtu|www.youtube|vimeo|youtube)\.(be|com)/[A-Za-z0-9\?&=]+$ 
|                   | 
here, and...                here.