如何从 rails 上 ruby 的元标记中获取内容值?

How to get content value out of meta tag in ruby on rails?

我的视图中有这个元标记列表 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"

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

给定一个 @meta 变量,其中包含一些 HTML 片段作为字符串:

@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 returns the first element matching the given CSS selector and [] returns 给定属性的值。

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

仅当元标记的名称不变时才有效

@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"]]

解释:

上面的代码将捕获带有元标记name="r_end"

content的值

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