我有像这样的HTML
<iframe width="560" height="315" src="http://www.youtube.com/embed/Wa6CA3YqV2Q" frameborder="0" allowfullscreen></iframe>
如何使用正则表达式获取视频ID Wa6CA3YqV2Q
?还有其他方法可以达到这个目的吗?
UPD:
我使用过Nokogiri,我设法得到http://www.youtube.com/embed/Wa6CA3YqV2Q
,那么我如何获得这个链接的视频ID?
答案 0 :(得分:3)
以下代码将使用任何vimeo或youtube网址并返回视频ID和提供商。
在你的模特中
def parse_video_url(url)
@url = url
youtube_formats = [
%r(https?://youtu\.be/(.+)),
%r(https?://www\.youtube\.com/watch\?v=(.*?)(&|#|$)),
%r(https?://www\.youtube\.com/embed/(.*?)(\?|$)),
%r(https?://www\.youtube\.com/v/(.*?)(#|\?|$)),
%r(https?://www\.youtube\.com/user/.*?#\w/\w/\w/\w/(.+)\b)
]
vimeo_formats = [%r(https?://vimeo.com\/(\d+)), %r(https?:\/\/(www\.)?vimeo.com\/(\d+))]
@url.strip!
if @url.include? "youtu"
youtube_formats.find { |format| @url =~ format } and $1
@results = {provider: "youtube", id: $1}
@results
elsif @url.include? "vimeo"
vimeo_formats.find { |format| @url =~ format } and $1
@results = {provider: "vimeo", id: $1}
@results
else
return nil # There should probably be some error message here
end
end
然后在你的控制器中打电话:
@results = @course.parse_video_url(@course.video_url)
# Access the hash with @results[:provider] or @results [:id]
在您的视图中,您可以编写IF语句来显示provider / id组合的相关嵌入代码。
答案 1 :(得分:1)
结束以下
string = 'http://www.youtube.com/embed/Wa6CA3YqV2Q'
result = string.split('/').last
答案 2 :(得分:0)
你可以使用
string.scan(/src="\S+\/(\w+)"/)[0][0]
但是如果你正在做大量的html工作,我会建议使用像Nokogiri这样的全功能HTML解析器,或者更轻量级的东西。
答案 3 :(得分:0)
虽然您可以使用正则表达式解析它,但使用正则表达式解析任意html是不好的,除非您真的知道自己在做什么。围绕这个主题有很多历史争议,如果你有兴趣可以搜索它。
正确的方法是解析文档,有一个很好的rails解析器:
答案 4 :(得分:0)
试试这个:
string = 'http://www.youtube.com/embed/Wa6CA3YqV2Q'
regex = /^(?:https?:\/\/)?(?:www\.)?\w*\.\w*\/(?:watch\?v=)?((?:p\/)?[\w\-]+)/
match = string.match(regex)
if match
return match[1]
end
return ''
我从这里得到了它并稍微改了一下:Parsing youtube url