Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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中的正则表达式转义括号不起作用_Javascript_Regex_Escaping - Fatal编程技术网

javascript中的正则表达式转义括号不起作用

javascript中的正则表达式转义括号不起作用,javascript,regex,escaping,Javascript,Regex,Escaping,我有一段代码正在做一些非常奇怪的事情 function getQuerystring(key, default_){ if (default_==null) default_=""; key = key.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]'); var regex = new RegExp("[\\?&]"+key+"=([^&#]*)"); var qs = regex.exec(window.locati

我有一段代码正在做一些非常奇怪的事情

function getQuerystring(key, default_){

  if (default_==null) default_=""; 
  key = key.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
  var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
  var qs = regex.exec(window.location.href);
  if(qs == null)
    return default_;
  else
    return qs[1];
}

var isThankyou = getQuerystring('CONFIRMATION');
此函数用于检查URL中的参数(在本例中为确认)。据我所知,一切都是正确的,但当浏览器加载代码时,它会在控制台中抛出一个错误

未捕获的语法错误:无效的正则表达式:缺少/


最终,这段代码用于确定用户是否在URL的确认页面上。如果他们是,那么它会触发一些谷歌分析代码来跟踪GA中的电子商务购买信息

给我带来麻烦的是:

key = key.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
当我在浏览器中加载页面并查看源代码时,会显示以下内容:

key = key.replace(/[\[]/,'\\\[').replace(/[\/,'\\\]');
两个
]
就在前面出现

奇怪的是。当我复制注释第一行的行时,不会抛出错误(但是,
]
仍然显示):

我尝试了所有我能想到的方法,但都没有成功,我甚至尝试了取消替换方法的颜色,以防导致问题

key = key.replace(/[\[]/,'\\\[');
  key = key.replace(/[\]]/,'\\\]');
这将在浏览器源中产生以下结果:

key = key.replace(/[\[]/,'\\\[');
  key = key.replace(/[\/,'\\\]');
在任何情况下,问题似乎在于第二个。替换为不转义一个
]
,甚至出于某种原因保留两个
]

我还尝试过删除缓存、cookies和关闭所有插件。我在Chrome、Firefox和Safari上进行了测试,在所有3个浏览器上都得到了相同的结果


这是您可以看到完整代码块的页面(头中的最后一个):

这会导致错误:
key=key.replace(/[\/,'\\]')
,因为您在正则表达式末尾用反斜杠转义正斜杠:
/[\/


请改为试试这个
key=key.replace(/[\\/,'\\\]')

您的代码看起来有点复杂。下面是一些简单的方法:

function getQueryString(key) {
    var index, url, parts, i, subparts;
    url = window.location.href;
    index = url.indexOf("?");
    if (index === -1) {
        return null;
    }
    url = url.substr(index);
    parts = url.split("&");
    for (i = 0; i < parts.length; i += 1) {
        subparts = parts[i].split("=");
        if (subparts[0] === key) {
            return subparts[1];
        }
    }
    return null;
}
函数getQueryString(键){
var索引、url、部分、i、子部分;
url=window.location.href;
index=url.indexOf(“?”);
如果(索引==-1){
返回null;
}
url=url.substr(索引);
parts=url.split(“&”);
对于(i=0;i

(未经测试)

tldr;您的输入是什么,您希望输出是什么?最终,这段代码用于确定用户是否在URL的确认页上。如果用户在URL的确认页上,则会触发一些google分析代码来跟踪GA中的电子商务购买信息。不,我的意思是,您的输入是什么?wi的一些可能值是什么ndow.location.href
?,,这就是你的意思吗?如果我仍然不理解这个问题,我很抱歉。是的,我理解这就是抛出错误的原因,我不理解的是为什么原始代码是key=key.replace(/[]/,“\\]”);它将在浏览器中使用上面的内容进行渲染。真令人沮丧。你是如何用php呈现javascript的?或者你只是在使用纯html?是的,纯html。我实际上是直接粘贴到页面编辑器中。尽管我想得越多,我想知道是否是系统(在线捐赠平台)导致了这些问题。谢谢,让我试试这个,看看它是否有效。我真的不在乎如何获得URL参数,只要我得到它:)
function getQueryString(key) {
    var index, url, parts, i, subparts;
    url = window.location.href;
    index = url.indexOf("?");
    if (index === -1) {
        return null;
    }
    url = url.substr(index);
    parts = url.split("&");
    for (i = 0; i < parts.length; i += 1) {
        subparts = parts[i].split("=");
        if (subparts[0] === key) {
            return subparts[1];
        }
    }
    return null;
}