2

我有这样的html

<iframe width="560" height="315" src="http://www.youtube.com/embed/Wa6CA3YqV2Q" frameborder="0" allowfullscreen></iframe>

如何Wa6CA3YqV2Q使用正则表达式获取视频 ID?还有其他方法可以实现这一目标吗?

UPD:我使用了 Nokogiri,并且我设法获得http://www.youtube.com/embed/Wa6CA3YqV2Q了具有此链接的视频的 id,那么我如何获得 id?

4

5 回答 5

5

下面的代码将采用任何 vimeo 或 youtube URL 并返回视频 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 语句来显示提供程序/id 组合的相关嵌入代码。

于 2015-04-03T08:18:17.507 回答
1

以以下结束

string = 'http://www.youtube.com/embed/Wa6CA3YqV2Q'

result =  string.split('/').last
于 2013-06-14T09:01:56.687 回答
0

您可以使用

string.scan(/src="\S+\/(\w+)"/)[0][0]

但如果你正在做大量的 html 工作,我会推荐使用像 Nokogiri 这样的完整的 HTML 解析器或者更轻量级的东西。

于 2013-06-14T07:47:11.093 回答
0

虽然您可以使用正则表达式解析它,但除非您真的知道自己在做什么,否则使用正则表达式解析任意 html 是不好的。关于这个主题有很多历史争议,如果您有兴趣,请搜索它。

正确的方法是解析文档,rails 有一个很棒的解析器:

http://nokogiri.org/

于 2013-06-14T07:49:06.993 回答
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 ''

我从这里得到它并稍微改变了一点:解析 youtube url

于 2013-12-20T06:59:55.163 回答