Ruby regex заменяет подстроку шаблоном хэша - PullRequest
0 голосов
/ 06 февраля 2019

Я должен заменить строки в хэше.У меня есть:

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 голосов
/ 06 февраля 2019

Что-то замечательное в методе 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

И тогда вы сделали!

0 голосов
/ 06 февраля 2019

Я думаю, регулярное выражение не читаемое решение.Вы можете использовать простой 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...