用Ruby替换字符串中出现的最有效方法?

时间:2012-10-24 15:18:14

标签: ruby json

我正在使用Ruby中的值替换环境变量,我正在尝试找出执行此操作的最佳方法。我有一个我正在解析的JSON Feed,它看起来像这样:%MY_SERVER/json/data/mydata?someparameter,另一个看起来像%MY_OTHER_SERVER/json/data/mydata?somethingdifferent=thisorthat

每个服务器都有不同的URL需要输入。我环顾四周,看到有关使用replace或寻找特定模式的事情,但我不认为这是最有效的方式。

有人能指出我正确的方向,或就完成任务的最佳方式提供一些建议吗?

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找一种有效的方法

myString = "%MY_SERVER/json/data/mydata?someparameter"
myString.gsub!("%MY_SERVER",  ENV['MY_SERVER'])

我认为这是最好的方法。 我认为使用gsub比使用

更快
myString["%MY_SERVER"] = ENV['MY_SERVER']

,而

myString.replace

将替换整个字符串,您不想使用它。

答案 1 :(得分:1)

以下是您寻求的动态方法:

urls = [
  '%MY_SERVER/json/data/mydata?someparameter',
  '%MY_OTHER_SERVER/json/data/mydata?somethingdifferent=thisorthat'
  ]

name_regex = /(%\w+)/

ENV['%MY_SERVER'] = 'http://google.com'

replaced = urls.map do |s|
  s.gsub name_regex do |env_name|
    if ENV[env_name]
      ENV[env_name] # replace
    else
      env_name # leave it untouched
    end

    # or, the same thing, but shorter
    # ENV[env_name] || env_name
  end
end

puts replaced
# >> http://google.com/json/data/mydata?someparameter
# >> %MY_OTHER_SERVER/json/data/mydata?somethingdifferent=thisorthat

您只需要扫描输入字符串并找到所有看起来像占位符的内容。幸运的是,你的字符串清晰地格式化了它们。然后,您只需在ENV中提供值。如果缺少占位符的值,则不会替换它。