1

我正在尝试在 javascript 上匹配 youtube 和 vimeo url。我正在使用 regexr 来玩,并想出了这个:

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

它在正则表达式上工作得很好,匹配中不包含空格,所以它只会匹配这个:

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")

不知道为什么会发生这种情况,我也尝试过添加\Sor!\s但它似乎没有任何效果。

4

3 回答 3

2

看起来您不是在检查字符串的开头/结尾。使用^$

var x = new RegExp("^(http|https)://(youtu|www.youtube|vimeo|youtube)\.(be|com)/[A-Za-z0-9\?&=]+$")
于 2012-10-15T14:46:52.123 回答
2

regex.test(string)返回是否在字符串中找到一个或多个匹配项的布尔值,因此它将(并且应该)返回truefor "http://www.youtube.com/watch?v=FvYo3ZgaQ1c&feature=plcp someword"

如果你想测试你的字符串是一个 URL 并且只是一个 url,添加一些锚点:

^(http|https)://(youtu|www.youtube|vimeo|youtube)\.(be|com)/[A-Za-z0-9\?&=]+$
于 2012-10-15T14:49:25.447 回答
1

那是因为你没有锚定你的表情。

^(http|https)://(youtu|www.youtube|vimeo|youtube)\.(be|com)/[A-Za-z0-9\?&=]+$
|                                                                           |
here, and...                                                                here.
于 2012-10-15T14:48:18.350 回答