我有一大堆代码正在做一些非常奇怪的事情。
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(在本例中为CONFIRMATION)。据我所知,一切都是正确的,但是当浏览器加载代码时,它会在控制台中引发错误。
Uncaught SyntaxError:无效的正则表达式:missing /
最终,这段代码用于确定用户是否在URL的确认页面上。如果是,那么它会触发一些谷歌分析代码来跟踪GA中的电子商务购买信息。
给我带来麻烦的是:
key = key.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
当我在浏览器中加载页面并查看源代码时,这就是显示的内容:
key = key.replace(/[\[]/,'\\\[').replace(/[\/,'\\\]');
在{/ p>之前出现两个]]
这是奇怪的事情。当我复制注释掉第一行的行时,错误不会被抛出(]]
仍会显示):
//key = key.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
key = key.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
我已经尝试了所有我能想到的但没有成功的事情,我甚至试图在引起问题的情况下解除替换方法。
key = key.replace(/[\[]/,'\\\[');
key = key.replace(/[\]]/,'\\\]');
在浏览器来源中产生以下结果:
key = key.replace(/[\[]/,'\\\[');
key = key.replace(/[\/,'\\\]');
在任何情况下,问题似乎是第二个.replace没有逃避]
,或者甚至因某种原因保留两个]]
。
我还尝试删除缓存,Cookie和关闭所有插件。我已经在Chrome,Firefox和Safari中测试了所有3个浏览器的相同结果。
以下是您可以看到完整代码块的页面(最后一个):https://secure2.convio.net/ccod/site/Ecommerce?store_id=2841
答案 0 :(得分:1)
您的代码看起来有点复杂。这里更简单:
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;
}
(未测试的)
答案 1 :(得分:0)
这会导致错误:key = key.replace(/[\/,'\\\]')
,因为您使用这样的反斜杠转义正则表达式末尾的正斜杠:/[\/
请改为key = key.replace(/[\\/,'\\\]')