我正在尝试修改以下正则表达式,以强制该域名为youtube
或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
First Regex
(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*)
问题是example.com
匹配!
所以我尝试将正则表达式修改为以下内容,以确保{ur}中的youtube
或youtu.be
:
((youtu.be\/)|(youtube.com\/))(v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*)
虽然这解决了我的example.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\/))([^#\&\?]*)
如何修复我的修改?
答案 0 :(得分:1)
ID总是11位吗?以下一些选项。
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)[/](.*?)(?=[?&]|$))
请注意www.example.com行未匹配