我有一个字符串
text 6ffdfd <a href="http://worldnews.com" target="_blank">toto</a> sdsdsd
我想找到一个
的正则表达式期望的最终结果是:
<a href="http://worldnews.com" target="_blank"><span>toto</span></a> sdsdsd
目前,我没有找到如何实现1,而我只是部分管理2.因为我当前的代码错误地添加了我不希望在/ span和关闭标记之间的空格
当前代码
orig_string = 'text 6ffdfd <a href="http://example.com" target="_blank">toto</a> sdsdsd'
end_result = orig_string.gsub(/<\/a>/, '</span> \\0')
print end_result
我在这里设置了一个可在线编辑的DEMO:https://repl.it/repls/SecondCapitalPika
答案 0 :(得分:1)
orig_string =~ /(?<=>)([^<]*)(?=<\/a>)/
if $1.present?
end_result = orig_strig.gsub(/(?<=>)([^<]*)(?=<\/a>)/, '<span>\1</span>')
end
分解
(?<=>) # to have character > before
([^<]*) # match everything until character <, match everything in a tag
(?=<\/a>) # to have </a> after
将导致
print end_result
'text 6ffdfd <a href="http://example.com" target="_blank"><span>toto</span></a> sdsdsd'
答案 1 :(得分:1)
如果您不一定需要正则表达式,那么您可以使用Nokogiri:
require 'nokogiri'
text = <<-TEXT
text 6ffdfd <a href="http://worldnews.com" target="_blank">toto</a> sdsdsd
6ffdfd text <a href="http://worldnews.com" target="_blank">tete</a> sdsdsd
6ffdfd text <a href="http://worldnews.com">titi</a> sdsdsd
TEXT
doc = Nokogiri.HTML text
doc.css('a[target="_blank"]').each { |anchor| anchor.add_next_sibling '<span>span</span>' }