我想将字符串转换:如何引用红宝石正则表达式
"{john:123456}"
到:
"<script src='https://gist.github.com/john/123456.js'>"
我写了一个可行的方法,但它是非常愚蠢的。它是这样的:
def convert
args = []
self.scan(/{([a-zA-Z0-9\-_]+):(\d+)}/) {|x| args << x}
args.each do |pair|
name = pair[0]
id = pair[1]
self.gsub!("{" + name + ":" + id + "}", "<script src='https://gist.github.com/#{name}/#{id}.js'></script>")
end
self
end
有没有办法做到这一点,就像下面的cool_method
?
"{john:123}".cool_method(/{([a-zA-Z0-9\-_]+):(\d+)}/, "<script src='https://gist.github.com/$1/$2.js'></script>")
如果这是从某处来的JSON,我只使用JSON。虽然正则表达式的解决方案“很好”,但我仍然会考虑将分割和索引所产生的值。 – 2013-05-06 13:50:32
+1 @DaveNewton。传入的数据字符串是JSON,因此第一步是将其重新转换为其对象形式,然后对其进行按摩。用正则表达式解析JSON可能会造成严重的后果。在散列或数组中进行按摩是不太可能发生的。 – 2013-05-06 15:41:04
是否总是只有一个名称/值,或者可以接收多个条目?而且,是字符串'“{john:123456}”,还是真的是'{“john”:123456}'? – 2013-05-06 15:51:25