目前我可以使用以下正则表达式从任何URL中提取“域名”:
/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n\?\=]+)/im
但是我也会得到子域名,而这是我想要避免的。例如,如果我有以下网站:
- www.google.com
- yahoo.com/something
- freds.meatmarket.co.uk?someparameter
- josh.meatmarket.co.uk/asldf/asdf
我目前得到的结果如下:
- google.com
- yahoo.com
- freds.meatmarket.co.uk
- josh.meatmarket.co.uk
我希望排除最后两个结果中的freds
和josh
子域名部分,并仅提取真正的域名,即meatmarket.co.uk
。
我发现了另一个尝试在PHP中解决的SOF,不幸的是我不懂PHP。这是否可翻译为JS(实际上我正在使用Google Script)?
function topDomainFromURL($url) {
$url_parts = parse_url($url);
$domain_parts = explode('.', $url_parts['host']);
if (strlen(end($domain_parts)) == 2 ) {
// ccTLD here, get last three parts
$top_domain_parts = array_slice($domain_parts, -3);
} else {
$top_domain_parts = array_slice($domain_parts, -2);
}
$top_domain = implode('.', $top_domain_parts);
return $top_domain;
}
http://freds.meatmarket.co.uk?someparameter?ordernumber=1234&email=break@regex.com
,子组匹配是regex.com
,因为它是在@上进行匹配的。 - Davoshttp://user@domain.com
的URL而编写的,并且不希望@
出现在其他任何地方。 - DavosreadDomain('https://www.ebay.com/sh/ord') -> "ebay.com"
和readDomain('https://www.ebay.co.uk/sh/ord') -> "co.uk"
。 - GEMI