如何从Rails中的ruby中的meta标签中获取内容价值?

时间:2019-03-05 09:02:33

标签: ruby-on-rails ruby ruby-on-rails-4

我在视图HTML中(页面加载后)具有此元标记列表。标签是动态生成的,

@meta = "\n  <meta content=\content1\">\n  <meta content=\content2\">\n  <meta content='content2\">\n  ....... <meta content=\"2019/01/10 09:59:59 +0900\" name=\"r_end\">\n \n"

我想获取2019/01/10 09:59:59 +0900内部的值content,即<meta content=\"2019/01/10 09:59:59 +0900\" name=\"r_end\">。有没有一种方法可以从meta标记中获取内容的价值。

2 个答案:

答案 0 :(得分:3)

给出一个包含一些HTML代码段作为字符串的@meta变量:

@meta = <<-HTML
  <meta name="foo" content="content1">
  <meta name="bar" content="content2">
  <meta content="2019/01/10 09:59:59 +0900" name="r_end">
HTML

您可以使用Nokogiri进行解析:

require 'nokogiri'
doc = Nokogiri::HTML::DocumentFragment.parse(@meta)
doc.at_css('meta[name="r_end"]')['content']
#=> "2019/01/10 09:59:59 +0900"

at_css返回与给定CSS选择器匹配的第一个元素,而[]返回给定属性的值。

答案 1 :(得分:0)

如何使用简单的正则表达式使用String#scan捕获值。

这仅在metatag名称不变的情况下有效

@meta = "\n  <meta content=\content1\">\n  <meta content=\content2\">\n  <meta content='content2\">\n  ....... <meta content=\"2019/01/10 09:59:59 +0900\" name=\"r_end\">\n \n"

@meta.scan(/content=\"(.*)\" name=\"r_end\"/) 
#=> [["2019/01/10 09:59:59 +0900"]]

说明:

上面的代码将捕获带有元标记content的{​​{1}}的值

如果您认为name="r_end"中可能还有其他HTML元素,则可能需要在正则表达式中添加其他标识符