как получить доменное имя из URL - PullRequest
46 голосов
/ 20 февраля 2009

Как я могу получить доменное имя из строки URL?

Примеры:

+----------------------+------------+
| input                | output     |
+----------------------+------------+
| www.google.com       | google     |
| www.mail.yahoo.com   | mail.yahoo |
| www.mail.yahoo.co.in | mail.yahoo |
| www.abc.au.uk        | abc        |
+----------------------+------------+

Связанный:

Ответы [ 18 ]

0 голосов
/ 01 октября 2015
0 голосов
/ 03 августа 2015

Используйте это (.) (. *?) (.) затем просто извлеките начальную и конечную точки. Легко, правда?

0 голосов
/ 02 апреля 2015
/^(?:https?:\/\/)?(?:www\.)?([^\/]+)/i
0 голосов
/ 20 февраля 2009

Вам нужен список того, какие доменные префиксы и суффиксы могут быть удалены. Например:

префиксы:

  • www.

суффиксы:

  • .com
  • .co.in
  • .au.uk
0 голосов
/ 28 февраля 2013

Так что, если у вас есть строка, а не window.location, вы можете использовать ...

String.prototype.toUrl = function(){

if(!this && 0 < this.length)
{
    return undefined;
}
var original = this.toString();
var s = original;
if(!original.toLowerCase().startsWith('http'))
{
    s = 'http://' + original;
}

s = this.split('/');

var protocol = s[0];
var host = s[2];
var relativePath = '';

if(s.length > 3){
    for(var i=3;i< s.length;i++)
    {
        relativePath += '/' + s[i];
    }
}

s = host.split('.');
var domain = s[s.length-2] + '.' + s[s.length-1];    

return {
    original: original,
    protocol: protocol,
    domain: domain,
    host: host,
    relativePath: relativePath,
    getParameter: function(param)
    {
        return this.getParameters()[param];
    },
    getParameters: function(){
        var vars = [], hash;
        var hashes = this.original.slice(this.original.indexOf('?') + 1).split('&');
        for (var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
        return vars;
    }
};};

Как использовать.

var str = "http://en.wikipedia.org/wiki/Knopf?q=1&t=2";
var url = str.toUrl;

var host = url.host;
var domain = url.domain;
var original = url.original;
var relativePath = url.relativePath;
var paramQ = url.getParameter('q');
var paramT = url.getParamter('t');
0 голосов
/ 23 марта 2010
#!/usr/bin/perl -w
use strict;

my $url = $ARGV[0];
if($url =~ /([^:]*:\/\/)?([^\/]*\.)*([^\/\.]+)\.[^\/]+/g) {
  print $3;
}
0 голосов
/ 28 мая 2019

Я знаю, что вопрос заключается в поиске решения для регулярных выражений, но при каждой попытке не получится охватить все

Я решил написать этот метод на Python, который работает только с URL-адресами, которые имеют поддомен (то есть www.mydomain.co.uk), а не поддоменами с несколькими уровнями, такими как www.mail.yahoo.com

def urlextract(url):
  url_split=url.split(".")
  if len(url_split) <= 2:
      raise Exception("Full url required with subdomain:",url)
  return {'subdomain': url_split[0], 'domain': url_split[1], 'suffix': ".".join(url_split[2:])}
0 голосов
/ 15 июня 2013

Для определенной цели я вчера сделал эту быструю функцию Python. Возвращает домен по URL. Это быстро и не требует каких-либо входных файлов со списком. Тем не менее, я не претендую на то, что он работает во всех случаях, но он действительно выполняет ту работу, которая мне была нужна для простого сценария интеллектуального анализа текста.

Вывод выглядит так:

http://www.google.co.uk => google.co.uk
http://24.media.tumblr.com/tumblr_m04s34rqh567ij78k_250.gif => tumblr.com

def getDomain(url):    
        parts = re.split("\/", url)
        match = re.match("([\w\-]+\.)*([\w\-]+\.\w{2,6}$)", parts[2]) 
        if match != None:
            if re.search("\.uk", parts[2]): 
                match = re.match("([\w\-]+\.)*([\w\-]+\.[\w\-]+\.\w{2,6}$)", parts[2])
            return match.group(2)
        else: return ''  

Кажется, работает довольно хорошо.
Однако его нужно изменить, чтобы удалить расширения домена на выходе, как вы пожелаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...