JavaScript Bracket RegExp

时间:2014-06-17 22:33:50

标签: javascript regex

我想用“ad231-3213-e12211”代替“[ID]”

我使用的是这个正则表达式:/\[ID\]/i

它与.replace(/\[ID\]/i, id)

完美配合

现在我把它封装在这个函数中:

self.changeUrl = function (url, id, replaceExp) {
    replaceExp = replaceExp === 'undefined' ? new RegExp("\[ID\]") : replaceExp instanceof RegExp ? replaceExp : new RegExp("\[ID\]"); // basically ensure that this is a regexp

    return url.replace(replaceExp, id);
};

和此:

self.changeUrl = function (url, id, replaceExp) {
    replaceExp = replaceExp === 'undefined' ? new RegExp("\u005BID\u005D") : replaceExp instanceof RegExp ? replaceExp : new RegExp("\u005BID\u005D"); // basically ensure that this is a regexp

    return url.replace(replaceExp, id);
};

它们都不起作用,我错过了什么?

3 个答案:

答案 0 :(得分:4)

由于您将字符串传递给RegExp构造函数,因此您还需要转义字符串中的\字符。因此,在字符串变量中使用实际变为\\[的{​​{1}};而\[只会成为\[

[

答案 1 :(得分:2)

确定:

如果要替换像[ID]这样的固定子字符串,根本不需要正则表达式,只需编写:

self.changeUrl = function (url, id, replaceExp) {
   return (replaceExp instanceof RegExp) ? url.replace(replaceExp, id)
                                         : url.replace('[ID]', id);
};

self.changeUrl = function (url, id, replaceExp) {
   return (replaceExp === 'undefined') ? url.replace('[ID]', id)
                                       : url.replace(replaceExp, id);
};

(取决于您想要的行为)

答案 2 :(得分:1)

"\[ID\]" - 这基本上将正则表达式转换为[ID],因为JavaScript中的反斜杠用作转义字符