我需要从
替换field_to_replace
...<div>\r\n<span field=\"field_to_replace\">\r\n<div>....
字符串中多次出现field_to_replace
。我需要在它之前和之后使用标签替换此事件。
答案 0 :(得分:1)
不要使用正则表达式尝试搜索或替换HTML或XML内部,除非您确保源布局不会发生变化。使用解析器进行更改非常容易,并且他们可以轻松处理对源的更改。
这将替换HTML中所有出现的字符串:
require 'nokogiri'
doc = Nokogiri::HTML::DocumentFragment.parse("<div><span field='field_to_replace'><div>")
doc.to_html # => "<div><span field=\"field_to_replace\"><div></div></span></div>"
doc.search('div span[@field]').each do |span|
span['field'] = 'foo'
end
doc.to_html # => "<div><span field=\"foo\"><div></div></span></div>"
如果您只想替换第一个匹配项,请使用at
代替search
:
doc = Nokogiri::HTML::DocumentFragment.parse("<div><span field=\"field_to_replace\"><div><span field='field_to_replace'></span></div></span></div>")
doc.to_html # => "<div><span field=\"field_to_replace\"><div><span field=\"field_to_replace\"></span></div></span></div>"
doc.at('div span[@field]')['field'] = 'foo'
doc.to_html # => "<div><span field=\"foo\"><div><span field=\"field_to_replace\"></span></div></span></div>"
通过定义CSS选择器,您可以快速轻松地识别节点。而且,如果您需要更多功能,则可以使用XPath代替CSS。
答案 1 :(得分:0)
简单的方法是:
str = "...<div>\r\n<span field=\"field_to_replace\">\r\n<span field=\"field_to_replace\">\r\n<div>...."
str.split("field_to_replace").join("new_field")
如果您需要更复杂的东西,请告诉我们。