在一个字符串上同时执行多次搜索替代操作

"Here is number #123".gsub(/[a-z]/i, '#').gsub(/#/, 'P')

 

这段代码将会输出:PPPP PP PPPPPP P123,我现在想把所有的字母替换成#,同时将#替换成P,那该怎么办呢?

 

现在提供一个方法,可以在一个字符串上同时执行多次搜索替代操作。

 

class String
  def mgsub(key_value_pairs = [].freeze)
    regexp_fragments = key_value_pairs.collect{|k, v| k}
    gsub(Regexp.union(*regexp_fragments)) do |match|
      key_value_pairs.detect{|k, v| k =~ match}[1]
    end
  end
end

 

再看一下调用

"Here is number #123".mgsub([[/[a-z]/i, '#'], [/#/, 'P']])

 

后的输出结果:#### ## ###### P123

你可能感兴趣的:(字符串)