2

我正在尝试修改以下正则表达式以强制域为youtubeor youtu.be。这个原始的正则表达式旨在在第二组中提供视频的 ID 以供观看。
例如lVIGhYMwRgs

我目前的测试清单

http://www.youtube.com/watch?v=lVIGhYMwRgs&feature=feedrec_grec_index
http://www.youtube.com/v/lVIGhYMwRgs?fs=1&hl=en_US&rel=0
http://www.youtube.com/watch?v=lVIGhYMwRgs#t=0m10s
http://www.youtube.com/embed/lVIGhYMwRgs?rel=0
http://www.youtube.com/watch?v=lVIGhYMwRgs
http://youtu.be/lVIGhYMwRgs
http://www.example.com/media/embed/83295164

第一个正则表达式

(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*)

在此处输入图像描述

问题是example.com匹配!

因此,我尝试将正则表达式修改为以下内容,以确保在 url 中youtubeyoutu.be在 url 中:

((youtu.be\/)|(youtube.com\/))(v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*)

在此处输入图像描述 虽然这解决了我的问题,但它与urlexample.com不匹配。youtu.be

我也尝试过这个正则表达式,因为我认为我的问题是youtu.be只有一个斜杠,然后是 id。

(youtube.com\/)(youtu.be|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*)

在此处输入图像描述

然后我尝试了这个,它适用于youtu.be其他东西。

((youtube.com\/)|(v\/|u\/\w\/|embed\/|watch\?v=|\&v=)|(youtu.be\/))([^#\&\?]*)

在此处输入图像描述

如何修复我的修改?

4

3 回答 3

1

ID总是11位数字吗?下面的一些选项。

小提琴

http://(www.)?youtu([.]be|be[.]com).*[/=]([A-Za-z0-9]{11})[?#&]*.*$

或者

[=/]([A-Za-z0-9]{11})([?#&]|$)

还发现了这个,这可能有助于 JavaScript 正则表达式:如何从 URL 获取 YouTube 视频 ID?

于 2013-05-15T02:44:26.777 回答
1

我已经破解了。能不能验证一次。

注意:空白组即 ()() 是由于 URL 易于处理,因此您只需考虑 Group[6],它只会给出 lVIGhYMwRgs。

((you(tu.be\/()()(.*)|tube.com\/(v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*))))
于 2013-05-15T03:52:09.190 回答
0

描述

试试这个正则表达式,它会查找 youtube.com,后跟一段长度的视频代码,直到下一个参数分隔符。或者它遵循 youtu.be 格式并查找/后跟一些可变长度的视频代码。

您将需要一些逻辑来解析返回字符串,在这种情况下,组 1 和 2 将匹配 youtube.com,组 3 和 4 将匹配 youtu.be。

(?:(youtube[.]com).*?(?:[?&]v=[^&]*?|[/](?:v|embed)[/]([^&?]*?))(?=$|[?#&]))|(?:(youtu[.]be)[/](.*?)(?=[?&]|$))

在此处输入图像描述

请注意 www.example.com 行是如何不匹配的

于 2013-05-15T03:58:42.037 回答