【发布时间】:2013-03-09 00:21:56
【问题描述】:
我有一段代码正在做一些非常奇怪的事情。
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
【问题讨论】:
-
tldr;你的输入是什么,你希望输出是什么?
-
最终,这段代码用于确定用户是否在 URL 的确认页面上。如果是,那么它会触发一些谷歌分析代码来跟踪 GA 中的电子商务购买信息。
-
不,我的意思是字面意思,您的意见是什么?
window.location.href有哪些可能的值? -
secure2.convio.net/ccod/site/Ecommerce?store_id=2841 , secure2.convio.net/ccod/site/EcommerceCheckout/… ,你是这个意思吗?如果我仍然不明白这个问题,我深表歉意。
标签: javascript regex escaping