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