我有一大段代码正在做一些非常奇怪的事情。
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)。据我所知,一切都是正确的,但是当浏览器加载代码时,它会在控制台中引发错误。
未捕获的 SyntaxError:无效的正则表达式:缺少 /
最终,这段代码用于确定用户是否在 URL 的确认页面上。如果是,那么它会触发一些谷歌分析代码来跟踪 GA 中的电子商务购买信息。
给我带来麻烦的行是:
key = key.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
当我在浏览器中加载页面并查看源代码时,会显示以下内容:
key = key.replace(/[\[]/,'\\\[').replace(/[\/,'\\\]');
之前有两个]]
出现
这是奇怪的事情。当我复制注释掉第一行的行时,不会引发错误(但是]]
仍然显示):
//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