目前我可以使用以下正则表达式从任何 URL 中提取“域”:
/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n\?\=]+)/im
不过,我也得到了我想避免的子域名。例如,如果我有网站:
- www.google.com
- yahoo.com/某事
- freds.meatmarket.co.uk?someparameter
- josh.meatmarket.co.uk/asldf/asdf
我目前得到:
- 谷歌网站
- 雅虎网站
- freds.meatmarket.co.uk
- josh.meatmarket.co.uk
最后两个我想排除freds
and josh
子域部分并仅提取真实域meatmarket.co.uk
.
我确实找到了另一个试图用PHP解决的SOF,不幸的是我不懂PHP。这可以翻译成JS吗(我实际上正在使用Google Script FYI)?
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;
}
那么,您需要从结果中删除第一个主机名,除非已经只有两部分?
只需使用与该条件匹配的正则表达式对第一次匹配的结果进行后处理即可:
function domain_from_url(url) {
var result
var match
if (match = url.match(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n\?\=]+)/im)) {
result = match[1]
if (match = result.match(/^[^\.]+\.(.+\..+)$/)) {
result = match[1]
}
}
return result
}
console.log(domain_from_url("www.google.com"))
console.log(domain_from_url("yahoo.com/something"))
console.log(domain_from_url("freds.meatmarket.co.uk?someparameter"))
console.log(domain_from_url("josh.meatmarket.co.uk/asldf/asdf"))
// google.com
// yahoo.com
// meatmarket.co.uk
// meatmarket.co.uk
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)