2012-04-20 21 views
9

¿Cómo puedo eliminar "www", "http: //", "https: //" de las cadenas de caracteres con Ruby?Eliminar "www", "http: //" de la cadena

He intentado esto, pero no funcionó:

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

Aquí lo que estoy haciendo en rieles:

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

Url se truncan, pero mi objetivo es eliminar el principio de los enlaces, como "www" o "http: //" para que el enlace se vea como "google.com/somepage/d ...", no como "http: //google.com/some ..."

+0

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

+0

Probé gsub con algunos regexes que encontré, pero nada funcionó. Por ejemplo esto: s.gsub ('/ (?: http?: \/\ /)? (?: www \.)? (* *) \ /? $/I', '') –

+0

¿Cuál es el tamaño más grande? problema que estás tratando de resolver? ¿Desea redireccionar "www.midominio.com" a "midominio.com"? – CambridgeMike

Respuesta

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

Si no desea utilizar s =, debe usar sub! s en lugar de todos sub s.

Los problemas con su código son:

  1. signo de interrogación siempre sigue después de un carácter opcional
  2. Siempre reemplace un patrón en una sub. Puede "encadenar" múltiples operaciones.
  3. Usa sub en lugar de gsub y ^ al principio de Regexp, por lo que solo reemplaza el http:// al principio, pero deja los que están en el medio.
+0

Awesome answer. Aquí hay una actualización: 's. (/^Https? \: \/\/(Www.)? /, '')' ... y '.sub (/\/.*$/, '')' a eliminar la ruta – Nav

4

Este método debe coger los 3 variaciones:

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

No funciona en todos los casos. ¿Qué tal strip_url ("http://stackoverflow.com")? –

+0

@ JuliusMarkūnas strip_url ("stackoverflow.com") aún devuelve el resultado esperado. ¿Qué esperabas que fuera diferente? – Josh

+0

maldición, se olvidó de citar el código: '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" 
Cuestiones relacionadas