如何从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 |
+----------------------+------------+
Run Code Online (Sandbox Code Playgroud)
有关:
pi.*_*pi. 39
我曾经为一家我工作过的公司写过这样的正则表达式.解决方案是这样的:
示例正则表达式:
.*([^\.]+)(com|net|org|info|coop|int|co\.uk|org\.uk|ac\.uk|uk|__and so on__)$
Run Code Online (Sandbox Code Playgroud)
这非常有效,并且还与de.com和朋友等奇怪的,非官方的顶层相匹配.
好处:
这个解决方案的缺点当然是:
Mik*_*e K 17
聚会有点晚了,但是:
const urls = [
'www.abc.au.uk',
'https://github.com',
'http://github.ca',
'https://www.google.ru',
'http://www.google.co.uk',
'www.yandex.com',
'yandex.ru',
'yandex'
]
urls.forEach(url => console.log(url.replace(/.+\/\/|www.|\..+/g, '')))
Run Code Online (Sandbox Code Playgroud)
jfs*_*jfs 11
/^(?:www\.)?(.*?)\.(?:com|au\.uk|co\.in)$/
Run Code Online (Sandbox Code Playgroud)
Cli*_*ton 11
准确地提取域名可能非常棘手,主要是因为域扩展可以包含2个部分(如.com.au或.co.uk),并且子域(前缀)可能存在也可能不存在.列出所有域扩展名不是一个选项,因为有数百个.例如,EuroDNS.com列出了800多个域名扩展名.
因此,我写了一个简短的php函数,它使用'parse_url()'和一些关于域扩展的观察来准确地提取url组件和域名.功能如下:
function parse_url_all($url){
$url = substr($url,0,4)=='http'? $url: 'http://'.$url;
$d = parse_url($url);
$tmp = explode('.',$d['host']);
$n = count($tmp);
if ($n>=2){
if ($n==4 || ($n==3 && strlen($tmp[($n-2)])<=3)){
$d['domain'] = $tmp[($n-3)].".".$tmp[($n-2)].".".$tmp[($n-1)];
$d['domainX'] = $tmp[($n-3)];
} else {
$d['domain'] = $tmp[($n-2)].".".$tmp[($n-1)];
$d['domainX'] = $tmp[($n-2)];
}
}
return $d;
}
Run Code Online (Sandbox Code Playgroud)
这个简单的功能几乎适用于所有情况.有一些例外,但这些非常罕见.
要演示/测试此功能,您可以使用以下内容:
$urls = array('www.test.com', 'test.com', 'cp.test.com' .....);
echo "<div style='overflow-x:auto;'>";
echo "<table>";
echo "<tr><th>URL</th><th>Host</th><th>Domain</th><th>Domain X</th></tr>";
foreach ($urls as $url) {
$info = parse_url_all($url);
echo "<tr><td>".$url."</td><td>".$info['host'].
"</td><td>".$info['domain']."</td><td>".$info['domainX']."</td></tr>";
}
echo "</table></div>";
Run Code Online (Sandbox Code Playgroud)
列出的URL的输出如下:
如您所见,无论提供给函数的URL如何,都会始终提取不带扩展名的域名和域名.
我希望这个对你有用.
有两种方式
使用拆分
然后只需解析该字符串
var domain;
//find & remove protocol (http, ftp, etc.) and get domain
if (url.indexOf('://') > -1) {
domain = url.split('/')[2];
} if (url.indexOf('//') === 0) {
domain = url.split('/')[2];
} else {
domain = url.split('/')[0];
}
//find & remove port number
domain = domain.split(':')[0];
Run Code Online (Sandbox Code Playgroud)
使用正则表达式
var r = /:\/\/(.[^/]+)/;
"http://stackoverflow.com/questions/5343288/get-url".match(r)[1]
=> stackoverflow.com
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
归档时间: |
|
查看次数: |
93046 次 |
最近记录: |