2017-10-10 35 views
0

我試圖編寫一個Greasemonkey userscript,用於檢查用戶是否位於某個網站列表中。僅限域+ 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中安裝腳本並在列出的站點中嘗試它。

+0

試試'let tlds =/\。(com | co \ .il)/;'或'let tlds =/\。(com | co \ .il)$ /;' –

+0

爲什麼要投票?解釋我試圖達到目的,問題,嘗試,錯誤環境和複製。 – OsiOs

回答

1

你應該重複的站點,如果HREF包含站點(sites[i]),域後取代一切(唐以後),警戒,並打破循環:

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 
 
    } 
 
}

+0

沙洛姆奧裏。請大家懇請詳細說明你在這裏做了什麼和我做了什麼之間的區別。你說你「從點向前取代了所有」,但我很想念你的意思。我看到你將正則表達式變量移到if內部,並添加了一個具有特定域的新變量(爲什麼,我虛心地希望這個變量儘可能靈活)。 – OsiOs

+0

作爲一名新生,我將非常感謝您的精心製作! – OsiOs

+0

我更新了代碼,並添加了評論。現在更清楚了嗎?最終結果是你在找什麼? –