2011-02-11 10 views

Odpowiedz

9

Trzeba tylko, aby wykluczyć jakąkolwiek mecz jest poprzedzone :

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

Dziękuję, ale jak mogę teraz zapobiec wybraniu najbliższej postaci z lewej? http://rubular.com/r/PhVk4JSxcx – krn

+1

Użyj ujemnego lookbehind: '% r {(? Phrogz

+1

Jeśli nie masz negatywnego lookbehinda możesz użyć przechwytywanie 'url.gsub (/ ([^:]) \/\ //, '\ 1 /')' – Stuart

0

gsub może wziąć blok:

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

Lub, jak @Phrogz tak uprzejmie przypomniał nam:

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

Próbowałem za pomocą 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 

Ale wydawało się, że ledwie lepiej niż przy użyciu wyrażenia regularnego.

Powiązane problemy