仅切割域+ TLD组合中的域

时间:2017-10-10 20:45:14

标签: javascript regex regex-negation

我尝试编写一个Greasemonkey用户脚本,用于检查用户是否在某个网站列表中。

如果用户确实在其中一个中,则脚本将发出警告:

  

已经足够了!

该脚本的目的是提醒用户他停止访问此站点(类似成瘾的行为)。

输出应仅包含域名不含 TLD。

我尝试了以下失败的代码(代码在tld集合上运行并使用集合来剥离这些代码):

let sites = ['walla.com', 'mako.co.il'];
let tlds = new RegExp('\.+(com|co.il)');

for (let i = 0; i < sites.length; i++) {
    if (window.location.href.indexOf(sites[i]) != -1 ) {
        sites.forEach((e)=>{
            e.replace(tlds, '').split('.').pop(),
        });

     alert(` Enough with this ${sites[i]} already! `);
    }
}

没有控制台错误。

要重现,请在Greasemoneky / Tampermonkey中安装脚本,并在列出的站点中进行尝试。

1 个答案:

答案 0 :(得分:1)

您应该迭代网站,如果href包含网站(sites[i]),请替换域之后的所有内容(向前),提醒并打破循环:

&#13;
&#13;
const sites = ['walla.com', 'mako.co.il'];
const regex = /\..+/;
const href = 'http://www.mako.co.il/news?partner=NavBar'; // this replace window.location.href for demo purposes

for (let i = 0; i < sites.length; i++) {
  if (href.includes(sites[i])) { // if the href includes the sites[i]
    const domain = sites[i].replace(regex, ''); // remove the 1st dot and everything after it to get the domain name

    alert(` Enough with this ${domain} already! `);
    
    break; // or return if in a function
  }
}
&#13;
&#13;
&#13;