Использование регулярных выражений для удаления относительных косых черт - PullRequest
1 голос
/ 31 марта 2010

Я пытаюсь удалить все относительные косые черты пути к изображению из фрагмента HTML, который содержит несколько других элементов.

Например

<img src="../../../../images/upload/1/test.jpg />

должно было бы стать

<img src="http://s3.amazonaws.com/website/images/upload/1/test.jpg" />

Я думал о том, чтобы написать это как помощник по рельсам, и просто передать весь блок в метод, и использовать вместо этого Nokogiri или Hpricot для анализа HTML, но я действительно не знаю.

Любая помощь будет отличной

Приветствие Адам

Ответы [ 3 ]

3 голосов
/ 31 марта 2010

Один из способов построения абсолютного пути с учетом абсолютного URL-адреса страницы и относительного пути, найденного на этой странице:

pageurl = 'http://s3.amazonaws.com/website/foo/bar/baz/quux/index.html'
relative = '../../../../images/upload/1/test.jpg'
absolute = pageurl.sub(/\/[^\/]*$/, '')
relative.split('/').each do |d|
  if d == '..'
    absolute.sub!(/\/[^\/]*$/, '')
  else
    absolute << "/#{d}"
  end
end
p absolute

В качестве альтернативы, вы можете немного обмануть:

'http:/'+File.expand_path(File.dirname(pageurl.sub(/^http:/, ''))+'/'+relative)
3 голосов
/ 31 марта 2010

Нет необходимости заново изобретать колесо, когда встроенная библиотека uri может сделать это за вас:

require 'uri'
main_path = "http://s3.amazonaws.com/website/a/b/c"
relative_path = "../../../../images/upload/1/test.jpg"

URI.join(main_path, relative_path).to_s
  # ==> "http://s3.amazonaws.com/images/upload/1/test.jpg"
1 голос
/ 31 марта 2010

Этот блок может помочь:

html = '<img src="../../../../images/upload/1/test.jpg />'
absolute_uri = "http://s3.amazonaws.com/website/images"
html.gsub(/(\.\.\/)+images/, absolute_uri)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...