2012-04-20 32 views
9

Come rimuovere "www", "http: //", "https: //" da stringhe che utilizzano Ruby?Rimuovere "www", "http: //" dalla stringa

Ho provato questo, ma non ha funzionato:

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

Ecco quello che sto facendo in Rails:

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

URL vengono troncati, ma il mio obiettivo è quello di rimuovere l'inizio della i link, ad esempio "www" o "http: //", quindi il link apparirebbe come "google.com/somepage/d ...", non come "http: //google.com/some ..."

+0

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

+0

Ho provato gsub con alcune regex che ho trovato ma niente ha funzionato. Ad esempio questo: s.gsub ('/ (?: http?: \/\ /)? (?: www \.)? (. *) \ /? $/I', '') –

+0

Qual è il più grande problema che stai cercando di risolvere? Vuoi reindirizzare "www.mydomain.com" a "mydomain.com"? – CambridgeMike

risposta

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

Se non si desidera utilizzare s =, è necessario utilizzare sub! s anziché tutti gli sub s.

I problemi con il codice sono:

  1. Punto interrogativo segue sempre dopo un carattere facoltativo
  2. Sostituire sempre uno schema in un sub. È possibile "concatenare" più operazioni.
  3. Utilizzare sub anziché gsub e ^ all'inizio di Regexp in modo da sostituire solo lo http:// all'inizio ma lascia quelli nel mezzo.
+0

Risposta stupenda. Ecco un aggiornamento: 's. (/^Https? \: \/\/(Www.)? /, '')' ... e '.sub (/\/.*$/, '')' a rimuovere il percorso – Nav

4

Questo metodo deve prendere tutte le 3 varianti:

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

Non funziona su tutti i casi. Che ne dici di strip_url ("http://stackoverflow.com")? –

+0

@ JuliusMarkūnas strip_url ("stackoverflow.com") restituisce comunque l'output previsto. Cosa ti aspettavi di essere diverso? – Josh

+0

dannazione, dimenticato di citare il codice: '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" 
Problemi correlati