2016-03-24 72 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