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

ben*_*ben 5 ruby regex youtube url

目前我正在使用此正则表达式从Youtube网址中提取视频ID:

url.match(/v=([^&]*)/)[1]
Run Code Online (Sandbox Code Playgroud)

如何更改此设置,以便它还可以从此Youtube网址获取视频ID,该网址没有v参数:

http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU
Run Code Online (Sandbox Code Playgroud)

谢谢阅读.

编辑:我正在使用ruby 1.8.7

小智 12

对于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
Run Code Online (Sandbox Code Playgroud)


Tim*_*ker 0

 url.match(/[^\/]+$/)[0]
Run Code Online (Sandbox Code Playgroud)

在这种情况下应该有效。这将匹配字符串中最后一个斜杠后面的任何内容,因此它当然会匹配不仅仅是 YouTube 视频 ID。从你的问题我推断你已经知道链接是否是 Youtube 链接(因为你的正则表达式也很不具体),但如果你不知道,请尝试

url.match(/youtube.com.*([^\/]+$)/)[1]
Run Code Online (Sandbox Code Playgroud)

除非您使用的是 Ruby 1.9,否则您无法在单个正则表达式中完成此操作,因为 Ruby 1.8 不支持lookbehind。