使用正则表达式获取URL的域

Fáb*_*rez 6 ruby regex string url parsing

我正在尝试获取给定URL的域名.例如http://www.facebook.com/someuser/将返回facebook.com.给定的URL可以采用以下格式:

  1. https://www.facebook.com/someuser (www.是可选的,但应该被忽略)
  2. www.facebook.com/someuser (http://不是必需的)
  3. facebook.com/someuser
  4. http://someuser.tumblr.com- >这tumblr.com只能返回

我写了这个正则表达式:

/(?: \.|\/{2})(?: www\.)?([^\/]*)/i

但它没有像我期望的那样起作用.

我可以部分地做到这一点:

  1. 删除http://https://,如果存在的字符串,string.delete "/https?:\/\//i".
  2. 删除www.string.delete "/www\./i".
  3. 获取匹配的域名 /(\w+\.\w+)+/i

但这不适用于子域.测试字符串:

https://www.facebook.com/username
http://last.fm/user/username
www.google.com
facebook.com/username
http://sub.tumblr.com/
sub.tumblr.com
Run Code Online (Sandbox Code Playgroud)

我需要这个以尽可能少的内存和处理海岸.

有任何想法吗?

Mau*_*res 10

为什么不直接使用URI类来执行此操作?

URI.parse( your_uri ).host
Run Code Online (Sandbox Code Playgroud)

而且你已经完成了.

只有一件事,如果在url的开头没有"http://"或"https://",你将不得不添加一个,或者解析方法不会给你一个主机(它会去是零).

  • 要忽略子域,请尝试`hostname.split('.').last(2).join('.')`. (3认同)