0

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

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

4

2 回答 2

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

(未经测试)

于 2013-03-09T00:34:01.447 回答
0

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

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

于 2013-03-09T00:32:59.017 回答