从URL提取基本域/ eTLD + 1

时间:2018-10-16 11:43:41

标签: javascript url dom firefox-addon firefox-webextensions

我当前正在编写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中是否有标准的方法吗?

3 个答案:

答案 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