正则表达式在javascript中转义括号不起作用

时间:2013-03-09 00:21:56

标签: 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.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

2 个答案:

答案 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(/[\\/,'\\\]')