Javascript 带有URL的正则表达式
我检查给定的url是否与另一个url匹配(可以有通配符) 例如,我有以下网址:Javascript 带有URL的正则表达式,javascript,regex,firefox-addon,Javascript,Regex,Firefox Addon,我检查给定的url是否与另一个url匹配(可以有通配符) 例如,我有以下网址: john.doe.de/foo 我现在想检查url是否有效,用户定义要检查的字符串,例如: *.doe.de/* 这很好,但在以下情况下,它不应该起作用,但会被接受: *.doe.de 在这里,我编写的函数到现在为止,URL存储为firefox prefs,我认为“checkedLocationsArray”包含所有要检查的URL function checkURLS(index) { if(index
john.doe.de/foo
我现在想检查url是否有效,用户定义要检查的字符串,例如:
*.doe.de/*
这很好,但在以下情况下,它不应该起作用,但会被接受:
*.doe.de
在这里,我编写的函数到现在为止,URL存储为firefox prefs,我认为“checkedLocationsArray”包含所有要检查的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;
}
}
}
函数检查URL(索引)
{
如果(索引>=0)
{
var pos=getPos(“URL掩码”);
var url=表[index][pos];
如果(url!=null&&url!=“”)
{
var urlnow=“”;
if(红色列表\u pref.prefHasUserValue(“表1”))
{
var checkedLocationsArray=新数组();
对于(i=0;i 对于(i=0;i为什么不添加字符串开头和结尾的字符
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;
}
//Check there's nothing else in the string
urlnow = '^' + urlnow + '$';
if(urlnow.indexOf('*') != -1)
{
while(urlnow.indexOf("*") != -1)
urlnow = urlnow.replace("\*", ".*");
}
else if(urlnow.lastIndexOf('/') != -1)
{
return false;
}
var regex = new RegExp(urlnow);
var Erg = regex.exec(url);
if(Erg != null)
return true;
}
}
return false;
}
}
}
函数检查URL(索引)
{
如果(索引>=0)
{
var pos=getPos(“URL掩码”);
var url=表[index][pos];
如果(url!=null&&url!=“”)
{
var urlnow=“”;
if(红色列表\u pref.prefHasUserValue(“表1”))
{
var checkedLocationsArray=新数组();
对于(i=0;i 对于(i=0;i而言,问题似乎是您没有检查字符串的开头和结尾
urlnow = '^'+urlnow+'$'; // this is new
var regex = new RegExp(urlnow);
^
是字符串开始的RegExp代码,$
是字符串结束的代码。这样可以确保整个url必须匹配模式,而不仅仅是其中的一部分。我发现我做的url不是当前url,我在下面更改了它
我还改变了,*现在被正则表达式替换,在这种情况下,点必须在那里
function redlist_checkURLS(index)
{
if(index >= 0)
{
var pos = getPos("URL-Mask");
var url = currenturl.replace("http://", "");
if(url != null && url != "")
{
var urlnow = "";
if(pref.prefHasUserValue("table.1"))
{
var urlsok = 0;
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("*", "\\S+")
}
var regex = new RegExp(urlnow);
var Erg = regex.exec(url);
if(Erg != null && Erg == url)
return true;
}
}
return false;
}
}
}
函数redlist\u检查URL(索引)
{
如果(索引>=0)
{
var pos=getPos(“URL掩码”);
var url=currenturl.replace(“http:/”,“”);
如果(url!=null&&url!=“”)
{
var urlnow=“”;
if(pref.prefHasUserValue(“表1”))
{
var urlsok=0;
var checkedLocationsArray=新数组();
对于(i=0;i 对于(i=0;iSeems to me您希望使用^…$
锚定表达式(以匹配字符串的开头和结尾)@FelixKling这是什么意思?所有功能都可以正常工作,但如果pref中没有“/*”,并且url中出现“/”,则函数不会返回false…这与正则表达式无关,还是我弄错了?正如我所说,代码“url.lastIndexOf(“/”)!=-1”应该是“问题”.好的,据我所知,如果您使用*.doe.de
作为表达式,那么您希望URL以de
结尾。在这种情况下,您可以在表达式的末尾添加$
,以标记字符串的结尾。对于您提供的输入,URL.lastIndexOf('/'))!=-1
将是false
,因此我不理解您在这里的混淆。您希望它匹配吗?我不希望url以de
结尾。我只想知道de/com/等之后是否还有更多内容。
,例如,如果pref没有包含/*,则/foo
。