2012-04-20 34 views
9

如何从字符串中使用Ruby删除“www”,“http://”,“https://”?从字符串中删除“www”,“http://”

我试过,但没有奏效:

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

这里我在做什么用Rails:

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

网址被截断,但我的目标是消除的开始链接如“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) – 2012-04-20 17:55:34

+0

我试过gsub,发现了一些正则表达式,但没有成功。例如:s.gsub('/(?: http?:\/\ /)?(?: www \。)?(。*)\ /?$/i','') – 2012-04-20 17:59:26

+0

什么是较大你正试图解决的问题?你想将“www.mydomain.com”重定向到“mydomain.com”吗? – CambridgeMike 2012-04-20 18:02:31

回答

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

如果您不想使用s =,则应该使用sub! s代替所有sub s。

与您的代码的问题是:

  1. 问号始终遵循一个可选的字符
  2. 后,始终更换一个子一个模式。你可以“链接”多个操作。
  3. 使用sub而不是gsub^在Regexp的开头,所以它只取代了http://在开始,但留下在中间。
+0

真棒回答。这是一个升级版:(/^https?\:\/\ /(www。)?/,'')'...和'.sub(/\/.*$/,'')'删除路径 – Nav 2012-10-16 04:20:30

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”)如何? – 2013-10-28 13:54:12

+0

@JuliusMarkūnasstrip_url(“stackoverflow.com”)仍然会返回预期的输出。你预计会有什么不同? – Josh 2013-10-29 17:25:10

+0

该死的,忘了引用代码: 'strip_url(“http://stackoverflow.com”)' – 2013-11-05 15:25:17

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"