2016-03-24 40 views
-7
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 

puts "GO HOME!".mgsub([[/.*GO/i, 'HoMe'], [/home/i, 'is where the heart is']]) 
puts "Here is number #123".mgsub([[/[a-z]/i, '#'], [/#/, 'P']]) 
+1

您应该详细说明您的问题 –

回答

0

key_value_pairs是一个数组的数组,每个数组都是一对。 detect取出一个元素,它是一个数组(对)。 [1]拿出后者(第二)的价值。

+0

为什么我不能使用任何其他整数代替1? – NishantT