Ruby on rails Ruby:剥离iframe并将其src转换为var
我试图解析一个包含iframe的字符串,将其Ruby on rails Ruby:剥离iframe并将其src转换为var,ruby-on-rails,ruby,ruby-on-rails-4,iframe,Ruby On Rails,Ruby,Ruby On Rails 4,Iframe,我试图解析一个包含iframe的字符串,将其src属性转换为一个特殊格式的Ruby变量,然后用以特定方式格式化的Ruby变量替换字符串中的iframe。到目前为止,我写了以下内容: def video_parse(string) if string.include?('youtube.com/?v=') url = 'youtube.com/?v=' string.gsub!('<iframe>.*</iframe>', video_service('
src
属性转换为一个特殊格式的Ruby变量,然后用以特定方式格式化的Ruby变量替换字符串中的iframe。到目前为止,我写了以下内容:
def video_parse(string)
if string.include?('youtube.com/?v=')
url = 'youtube.com/?v='
string.gsub!('<iframe>.*</iframe>', video_service('YOUTUBE', vid(string, url)))
end
if string.include?('player.vimeo.com/video/')
url = 'player.vimeo.com/video/'
string.gsub!('<iframe>.*</iframe>', video_service('VIMEO', vid(string, url)))
end
string
end
def vid(string, url)
string.split(url).last.split(/['"]/).first
end
def video_service(service, vid)
"*|#{service}:[$vid=#{vid}]|*"
end
第二次尝试看起来是这样的,但仍然不能替代任何东西:
def mailchimp_video_parse(string)
if string.include?('youtube.com/?v=')
string.gsub!(iframe) { video_service('YOUTUBE', vid(Regexp.last_match[1])) }
end
if string.include?('player.vimeo.com/video/')
string.gsub!(iframe) { video_service('VIMEO', vid(Regexp.last_match[1])) }
end
string
end
def vid(iframe)
iframe.split!('src').last.split!(/"/).first
end
def iframe
'<iframe.*<\/iframe>'
end
def video_service(service, vid)
"*|#{service}:[$vid=#{vid}]|*"
end
def mailchimp_video_parse(字符串)
if string.include?('youtube.com/?v='))
string.gsub!(iframe){video_service('YOUTUBE',vid(Regexp.last_match[1])}
结束
if string.include?('player.vimeo.com/video/')
string.gsub!(iframe){video_服务('VIMEO',vid(Regexp.last_match[1])}
结束
一串
结束
def视频(iframe)
伊夫拉,分开!('src').last.split!(/“/)。首先
结束
def iframe
'
iframe
方法应为/
使用Nokogiri时,iframe
方法应该更安全一些:
d = Nokogiri::HTML(string)
d.css('iframe').each do |i|
if i['src'] =~ %r{(youtube|vimeo).*?([^/]+)$}i
i.replace(video_service($1.upcase, $2)
end
end
puts d.to_html
(但请注意,它的效率低于纯regexp解决方案,因为Nokogiri将解析整个HTML。)使用Nokogiri更安全一些:
d = Nokogiri::HTML(string)
d.css('iframe').each do |i|
if i['src'] =~ %r{(youtube|vimeo).*?([^/]+)$}i
i.replace(video_service($1.upcase, $2)
end
end
puts d.to_html
(但请注意,它的效率低于纯regexp解决方案,因为Nokogiri将解析整个HTML。)你能举一个例子说明什么string
可能是问题已经更新了。你能举一个例子说明什么string
可能是问题已经更新了。当然,该死。尽管我的vid
方法现在返回了这个错误:NoMethodError:nil的未定义方法'split':NilClass from(irb):359:in vid
soRegexp.lastmatch[1]
一定返回了错误的内容。上面的编辑会给你一个结果,但它可能不是你想要的,当然,你可能必须重做video\u服务
methodAmit。虽然我的vid
方法现在返回这个错误:NoMethodError:nil的未定义方法'split':NilClass from(irb):359:在vid
中,因此Regexp.lastmatch[1]
必须返回错误的内容。上面的编辑将给您一个结果,但它可能不是您想要的,您可能必须重新执行视频服务
方法,太完美了,无法将其标记为正确。谢谢!太完美了,无法将其标记为正确。谢谢!
d = Nokogiri::HTML(string)
d.css('iframe').each do |i|
if i['src'] =~ %r{(youtube|vimeo).*?([^/]+)$}i
i.replace(video_service($1.upcase, $2)
end
end
puts d.to_html