2011-02-11 81 views

回答

9

你只需要排除这是由:

url.gsub(/([^:])\/\//, '\1/') 
+1

谢谢,但我怎么能现在阻止它从左边选择最接近的字符? http://rubular.com/r/PhVk4JSxcx – krn 2011-02-11 00:23:03

0

gsub preceeded任何比赛可以拿块:

url = 'http://host.com//foo/bar' 
puts url.gsub(%r{.//}) { |s| (s == '://') ? s : s[0] + '/' } 
>> http://host.com/foo/bar 

或者,@Phrogz如此亲切地提醒我们:

puts url.gsub(%r{(?<!:)//}, '/') 
>> http://host.com/foo/bar 
2

我尝试使用URI

require "uri" 
url = "http://host.com//foo//bar" 
components = URI.split(url) 
components[-4].gsub!(/\/+/, "/") 
fixed_url = [components[0], "://", components[2], components[-4]].join 

但是这似乎并不比使用正则表达式更好。