如何更改此正则表达式以从未指定v参数的Youtube URL获取YoutubevideoID?

目前我正在使用此正则表达式从Youtubeurl中提取videoID:

url.match(/v=([^&]*)/)[1] 

如何更改此设置,以便它还可以从此Youtubeurl获取videoID,该url没有v参数:

 http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU 

谢谢阅读。

编辑:我正在使用ruby 1.8.7

对于Ruby 1.8.7,这样做。

 url_1 = 'http://www.youtube.com/watch?v=8WVTOUh53QY&feature=feedf' url_2 = 'http://www.youtube.com/user/ForceD3strategy#p/a/u/0/8WVTOUh53QY' regex = /youtube.com.*(?:\/|v=)([^&$]+)/ puts url_1.match(regex)[1] # => 8WVTOUh53QY puts url_2.match(regex)[1] # => 8WVTOUh53QY 

没有必要使用正则表达式

 >> url="http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU" => "http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU" >> (a = url["?v="]) ? url.split("?v=")[1] : url.split("/")[-1] => "Xc81AajGUMU" >> url="http://www.youtube.com/watch?v=j5-yKhDd64s" => "http://www.youtube.com/watch?v=j5-yKhDd64s" >> (a = url["?v="]) ? url.split("?v=")[1] : url.split("/")[-1] => "j5-yKhDd64s" 
  url.match(/[^\/]+$/)[0] 

应该在这种情况下工作。 这将匹配字符串中最后一个斜杠后面的任何内容,因此它当然比YoutubevideoID更多。 根据您的问题,我推断您已经知道链接是否是Youtube链接(因为您的正则表达式也非常不明确),但如果您不这样做,请尝试

 url.match(/youtube.com.*([^\/]+$)/)[1] 

除非你使用的是Ruby 1.9,否则你无法在一个正则表达式中完成它,因为Ruby 1.8不支持lookbehind。