2012-04-20 32 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"