在`<i>`标签</i>中包含字符串的一部分

时间:2011-03-09 22:50:36

标签: ruby ruby-on-rails-3

我有一个字符串:

<a href="x.com">x.com</a>

..我想要替换标记的文本,以便将其包装在<i>标记中:

<a href="x.com"><i>x.com</i></a>

使用正则表达式>.*<,我得到>x.com<的匹配,但我真的只想要确切的文字,所以我可以gsub

'<a href="x.com">x.com</a>'.gsub(<what here?>,<what here?>)

我该怎么做?

更新

Ps。这是在Ruby 1.8.7 p330上的Rails 3.0.3中

5 个答案:

答案 0 :(得分:2)

Nokogiri是一个在Ruby中解析HTML和XML的好工具。使用它可以使您免于处理因格式错误的标记或更改结构而导致的各种HTML不一致问题。

这将包装整个HTML文档中所有<a>标记的内容:

require 'nokogiri'

html = '<a href="x.com">x.com</a>'
doc = Nokogiri::HTML::DocumentFragment.parse(html)

doc.search('a').each do |_node|  
  _node.inner_html = "<i>#{_node.content}</i>"
end

puts doc

# >> <a href="x.com"><i>x.com</i></a>

答案 1 :(得分:1)

我强烈建议不要像这样编辑HTML,但这应该做你想要的:

'<a href="x.com">x.com</a>'.gsub(/>(.*?)</, '><i>\1</i><')

答案 2 :(得分:1)

使用(?&lt; = pattern)指定前面的上下文和(?= pattern)指定以下上下文。

'<a href="x.com">x.com</a>'.gsub(/(?<=\>).*?(?=\<)/, '<i>\0</i>')

答案 3 :(得分:1)

如何使用>(.*)<而不是>.*<添加括号?

答案 4 :(得分:0)

我不太了解Ruby,但也许它有一个HTML解析库,可以比正则表达式更可靠地执行此操作?

Obligatory link re parsing HTML with regexes