在javascript中匹配特定网址

时间:2012-10-15 14:42:54

标签: javascript regex

我正在尝试在javascript上匹配youtube和vimeo网址。我正在使用regexr来玩游戏并提出这个:

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

它在regexr上工作得很好,空格不包含在匹配中,所以它只匹配这个:

http://youtu.be/ssdfsjlfsfsl

而不是这个:

http://youtu.be/ssdfsjl someword

但是当我在javascript上测试时,它仍然会在网址旁边添加一个空格和另一个单词:

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,但似乎没有任何效果。

3 个答案:

答案 0 :(得分:2)

看起来你没有检查字符串的开头/结尾。使用^$

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

答案 1 :(得分:2)

regex.test(string)返回一个布尔值,表示是否在字符串中找到一个或多个匹配项,因此它会(并且应该)返回true的{​​{1}}。

如果您想测试您的字符串是一个URL而且只是一个网址,请添加一些锚点:

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

答案 2 :(得分:1)

这是因为你没有锚定你的表达。

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