2012-04-20 4 views
9

Как удалить строки «www», «http: //», «https: //» из строк с помощью Ruby?Удалить «www», «http: //» из строки

Я попытался это, но он не работает:

s.gsub('/(?:http?:\/\/)?(?:www\.)?(.*)\/?$/i', '') 

Вот что я делаю в Rails:

<%= auto_link(job.description) do |url| url.truncate(25).gsub('http://', '') end %> 

Url обрезаются, но моя цель состоит в том, чтобы удалить начало ссылки, такие как «www» или «http: //», поэтому ссылка будет выглядеть как «google.com/somepage/d ...», а не как «http: //google.com/some ...»

+0

[ 'Строка # sub'] (http://www.ruby-doc.org/core-1.9.3/String .html # method-i-sub-21) –

+0

Я пробовал gsub с некоторыми регулярными выражениями, которые я нашел, но ничего не работало. Например: s.gsub ('/ (?: http?: \/\ /)? (?: www \.)? (. *) \ /? $/I', '') –

+0

Чем больше проблема, которую вы пытаетесь решить? Вы хотите перенаправить «www.mydomain.com» на «mydomain.com»? – CambridgeMike

ответ

39
s = s.sub(/^https?\:\/\//, '').sub(/^www./,'') 

Если вы не хотите использовать s =, вы должны использовать sub! s вместо всех sub s.

Проблемы с вашим кодом являются:

  1. Вопросительный знак всегда следует за необязательный символ
  2. Всегда заменять один шаблон в суб. Вы можете «объединить» несколько операций.
  3. Используйте sub вместо gsub и ^ в начале Regexp, поэтому он только заменяет http:// в начале, но оставляет их посередине.
+0

Удивительный ответ. Вот обновление: 's. (/^Https? \: \/\/(Www.)? /, '')' ... и '.sub (/\/.*$/, '')' to удалить путь – Nav

4

Этот метод должен поймать все 3 вариации:

def strip_url(url) 
    url.sub!(/https\:\/\/www./, '') if url.include? "https://www." 

    url.sub!(/http\:\/\/www./, '') if url.include? "http://www." 

    url.sub!(/www./, '')   if url.include? "www." 

    return url 
end 

strip_url("http://www.google.com") 
    => "google.com" 
strip_url("https://www.facebook.com") 
    => "facebook.com" 
strip_url("www.stackoverflow.com") 
    => "stackoverflow.com" 
+0

Не работает во всех случаях. Как насчет strip_url ("http://stackoverflow.com")? –

+0

@ JuliusMarkūnas strip_url ("stackoverflow.com") по-прежнему возвращает ожидаемый результат. Что вы ожидали от других? – Josh

+0

damn, забыли привести код: 'strip_url (" http://stackoverflow.com ")' –

0
def strip_url(target_url) 
    target_url.gsub("http://", "") 
      .gsub("https://", "") 
      .gsub("www.", "") 
end 

strip_url("http://www.google.com") 
=> "google.com" 
strip_url("https://www.google.com") 
=> "google.com" 
strip_url("http://google.com") 
=> "google.com" 
strip_url("https://google.com") 
=> "google.com" 
strip_url("www.google.com") 
=> "google.com" 
Смежные вопросы