Ruby正则表达式用哈希模式替换子字符串

时间:2019-02-06 14:10:44

标签: regex ruby string

我必须替换哈希中的字符串。我有:

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

我需要一些可以处理上述任何情况的方法/解决方案。

2 个答案:

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