我当前正在编写WebExtension。在此扩展程序中,我需要处理JS中的一堆URL,并提取基本域(又名eTLD + 1)。
所以
www.cnn.com
=> cnn.com
cnn.com
=> cnn.com
www.world.cnn.com
=> cnn.com
www.bbc.co.uk
=> bbc.co.uk
从示例中可以看到,没有简单的技术可以提取所有内容。实际上,the official list的长度约为12,000行。
我知道浏览器可以在内部完成它。我想知道在JS中是否有标准的方法吗?
答案 0 :(得分:1)
也许要迟到,但:
对于在浏览器中的使用,Raymond Hill(uBlock的原始作者)有publicsuffixlist.js实现,效果很好,也可以选择使用WASM以获得更好的性能。 您还需要punycode.js
简单用法(一旦拥有publicsuffix.min.js和punycode.js):
// at this point you have the publicsuffix list in a string
const publicSuffixList = "must contain list from https://publicsuffix.org/list/public_suffix_list.dat";
window.publicSuffixList.parse(publicSuffixList, punycode.toASCII);
// optionnal enable wasm : need that you serve the WASM file with MIME type
// "Content-Type: application/wasm"
window.publicSuffixList.enableWASM().then(status => {
console.log("WASM status: ", status);
});
const host = "www.bbc.co.uk";
const hostPuny = punycode.toASCII(host);
const domain = window.publicSuffixList.getDomain(hostPuny);
console.log("eTLD+1 : ", punycode.toUnicode(domain));
答案 1 :(得分:0)
您可以将String.replace与正则表达式一起使用:
var url = "https://www.test.com";
var base = url.replace(/(https?:\/\/)?(www.)?/gi,"");
console.log(base)
答案 2 :(得分:0)
似乎没有任何JavaScript API,但是下面的Node模块看起来很成功:https://www.npmjs.com/package/publicsuffixlist