在前面匹配域并获取视频ID时遇到问题

时间:2013-05-15 02:12:31

标签: .net regex

我正在尝试修改以下正则表达式,以强制该域名为youtubeyoutu.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

First Regex

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

enter image description here

问题是example.com匹配!

所以我尝试将正则表达式修改为以下内容,以确保{ur}中的youtubeyoutu.be

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

enter image description here 虽然这解决了我的example.com问题,但它与youtu.be网址不匹配。

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

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

enter image description here

然后我尝试了这个适用于youtu.be而不是其他的。

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

enter image description here

如何修复我的修改?

3 个答案:

答案 0 :(得分:1)

ID总是11位吗?以下一些选项。

Fiddle

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

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

也找到了这个,这可能会有所帮助 JavaScript REGEX: How do I get the YouTube video id from a URL?

答案 1 :(得分:1)

我已经破解了它。你能验证一次吗?

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

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

答案 2 :(得分:0)

描述

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

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

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

enter image description here

请注意www.example.com行未匹配