Ruby 2.3 - 在某些正则表达式匹配之前和之后添加字符串

时间:2017-12-06 14:04:43

标签: ruby-on-rails ruby regex

我有一个字符串

text 6ffdfd <a href="http://worldnews.com" target="_blank">toto</a> sdsdsd

我想找到一个

的正则表达式
    1. 在标记html链接结束后添加一个开放范围标记(也就是说在字符串“target =”_ blank“&gt;”
    2. 之后准确无误)
    1. 在标签关闭之前添加一个结束范围标记

期望的最终结果是:

 <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

2 个答案:

答案 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>' }