我檢查給定的url是否與另一個url匹配(可以有通配符)。正則表達式與網址
例如我有以下網址:
john.doe.de/foo
我現在想查詢的網址是否有效與否,用戶定義要檢查的字符串與例如:
*.doe.de/*
這工作正常,但具有下列不應該工作,但它被接受:
*.doe.de
這裏我寫到現在的功能,URL存儲爲Firefox的首選項和我的「checkedLocationsArray」 containts要檢查所有的URL。
function checkURLS(index)
{
if(index >= 0)
{
var pos = getPos("URL-Mask");
var url = tables[index][pos];
if(url != null && url != "")
{
var urlnow = "";
if(redlist_pref.prefHasUserValue("table.1"))
{
var checkedLocationsArray = new Array();
for(i = 0; i < tables.length; i++)
{
checkedLocationsArray[i] = tables[i][pos];
}
for(i=0;i<checkedLocationsArray.length;i++)
{
urlnow = checkedLocationsArray[i];
if(urlnow == url)
{
return true;
}
if(urlnow.indexOf('*.') != -1)
{
while(urlnow.indexOf("*.") != -1)
urlnow = urlnow.replace("\*.", "\.[^\.]*");
}
if(urlnow.indexOf('.*') != -1)
{
while(urlnow.indexOf(".*") != -1)
urlnow = urlnow.replace(".\*", "([^\.]*\.)");
}
if(urlnow.indexOf('/*') != -1)
{
while(urlnow.indexOf("/*") != -1)
urlnow = urlnow.replace("/*", /\S\+*/)
}
else if(url.lastIndexOf('/') != -1)
{
return false;
}
var regex = new RegExp(urlnow);
var Erg = regex.exec(url);
if(Erg != null)
return true;
}
}
return false;
}
}
}
我認爲「else if(url.indexOf('/')!= -1)」是重要的部分。它應該工作得很好,如果我提醒它,我甚至會得到結果是真實的,但它似乎是如果沒有被執行.. 如果有什麼不清楚,請發表評論。提前致謝!
對我來說,你想用'^ ... $'錨定表達式(匹配字符串的開頭和結尾)。 –
@FelixKling你的意思是什麼?所有的工作都很好,只是如果pref中沒有'/ *'而url中出現'/'則函數不會返回false ......這與RegEx沒有關係,或者我誤解了?正如我添加的,代碼「url.lastIndexOf('/')!= -1」應該是「問題」。 – Termi
那麼,從我的理解,如果你有'* .doe.de'作爲表達式,那麼你希望URL以'de'結尾。在這種情況下,您需要在表達式的末尾添加'$'來標記字符串的末尾。對於你給出的輸入,'url.lastIndexOf('/')!= -1'將是'false',所以我不明白你的困惑。你想讓它匹配嗎? –