12

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

我试过了,但没有用:

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..."

4

3 回答 3

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

如果您不想使用s =,则应使用sub!s 而不是全部subs。

您的代码的问题是:

  1. 问号总是跟在可选字符之后
  2. 始终替换子中的一个模式。您可以“链接”多个操作。
  3. 在 Regexp 的开头使用sub而不是gsub^,因此它仅替换http://开头的,但将中间的保留。
于 2012-04-20T18:30:13.000 回答
5

此方法应捕获所有 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" 
于 2012-04-20T19:11:50.127 回答
1
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" 
于 2015-11-13T10:05:56.547 回答