好吧,听起来很简单,我仍然不知道该怎么做(想象一下我什至决定为此更改语言)。
所以,我有简单的文本或包含一些标签的文本(注意:有些可能不被视为有效的 html 标签,例如 <ref>
),我想删除所有标签及其内容。
尝试了Nokogiri的.search("//text()").text
,但它离我需要的还很远。
想法?
附言我正在寻找一种防弹的、100% 有效的解决方案,所以正则表达式是不可能的......
示例输入/输出
One <!-- Two -->Three
应该返回One Three
.
This is <a href='#'>some Text</a>
应该返回This is
.
Even more <ref name='tag'>reference</ref><br>text
应该返回Even more text
.
如果你想用Nokogiri执行此操作,你必须使用DocumentFragment
类,因为文本不是有效的HTML或XML文档。
doc = Nokogiri::HTML::DocumentFragment.parse(text)
puts doc.xpath("text()")
这将为您提供指定的输出。
> 对于手头的问题来说,Nokogiri 似乎有点矫枉过正,我会使用正则表达式来解决它,如下所示
input = "One <!-- Two -->Three"
input.gsub(/(<.+>)/)
#=> "One Three"
input = "This is <a href='#'>some Text</a>"
input.gsub(/(<.+>)/, "")
#=> "This is "
input = "Even more <ref name='tag'>reference</ref><br>text"
input.gsub(/(<.+>)/, "")
#=> "Even more text"
卢布演示