我有一个字符串:
html_string =
'<span><span class=\"ip\"></span> Do not stare <span class=\"img\"></span> at the monitor continuously </span>\r\n'
我想将s
的原始文本(不在html代码中)中的字符html_string
替换为<span class="highlighted">s</span>
。
结果应为:
'<span><span class=\"ip\"></span> Do not <span class="highlighted">s</span>tare <span class=\"img\"></span> at the monitor continuou<span class="highlighted">s</span>ly </span>\r\n'
我做的是:
html_string.gsub(/s/, '<span class="highlighted">s</span>')
但是,无论原始文本或标记如何,这都会替换所有s
字符。我想替换它跳过html标签及其属性。怎么做?
答案 0 :(得分:3)
不要假装是理想的答案,只是为了给你一个去的地方:
require 'nokogiri'
html_string = '<span><span class="ip"></span> Do not stare <span class="img"></span> at the monitor continuously </span>'
doc = Nokogiri::HTML.fragment(html_string)
spans = doc.css('span')
spans.each do |span|
span.xpath('text()').each do |text|
if text.content =~ /stare/
text.content = text.content.sub(/stare/, '<span class="highlighted">s</span>tare')
end
end
end
p doc.to_html.gsub(/\</, '<').gsub(/\>/, '>')
哪个输出是:
#=> "<span><span class=\"ip\"></span> Do not <span class=\"highlighted\">s</span>tare <span class=\"img\"></span> at the monitor continuously </span>"
所以,我们在这里寻找所有span
并检查它们是否有stare
字的内容。然后我们改变内容。这就是全部,并学习nokogiri。
答案 1 :(得分:1)
这很简单:解析html,替换文本节点,打印到html。
Nokogiri似乎在Ruby中很受欢迎。