我必须替换哈希中的字符串。我有:
hash = {"{STAY_ID}"=>"30030303", "{USER_NAME}"=>"test"}
我必须在这里替换它:
str = "www.domain.com?person={STAY_ID}&user={USER_NAME}"
#=> www.domain.com?person=30030303&user=test
此外,当一个字符串中至少有一个匹配项时,它应该可以工作:
str = "www.domain.com?person={STAY_ID}"
#=> www.domain.com?person=30030303
我需要一些可以处理上述任何情况的方法/解决方案。
答案 0 :(得分:2)
gsub
方法的优点在于,它实际上可以将映射的哈希作为第二个参数,然后将其用于替换匹配的值。因此,如果在花括号之间对任何文本进行正则表达式,则可以执行以下操作。
str = "www.domain.com?person={STAY_ID}&user={USER_NAME}"
hash = {
"{STAY_ID}"=>"30030303",
"{USER_NAME}"=>"test"
}
str.gsub(/{(.*?)}/, hash) #www.domain.com?person=30030303&user=test
然后就完成了!
答案 1 :(得分:1)
我认为,正则表达式不是可读的解决方案。您可以使用简单的gsub
方法:
str = "www.domain.com?person={STAY_ID}&user={USER_NAME}"
hash = {"{STAY_ID}"=>"30030303", "{USER_NAME}"=>"test"}
result_str = hash.inject(str.dup) do |acc, (key, value)|
acc = acc.gsub(key, value)
end
result_str # www.domain.com?person=30030303&user=test