Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有URL的正则表达式_Javascript_Regex_Firefox Addon - Fatal编程技术网

Javascript 带有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

我检查给定的url是否与另一个url匹配(可以有通配符)

例如,我有以下网址:

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