JavaScript方括号正则表达式

4

我希望用"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);
};

而且它们都不起作用,我缺少什么?

谢谢,您的帖子是一个答案,也解释了为什么您需要这样做,我会接受它。 - Callum Linington
3个回答

4

由于您将字符串传递给RegExp构造函数,因此您还需要在字符串内部转义\字符。因此,请使用\\[,它实际上会变成字符串变量中的\[;而\[仅会变成[

new RegExp( "\\[ID\\]" )

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

(根据您想要的行为)

(这与IT技术有关)。

这是一个非常有趣的答案,唯一需要说的是使用正则表达式可以打开更多替换选项。如果[ID]不够好,那么它可能需要变得更加复杂等等。 - Callum Linington
@No1_Melman:这两个函数可以使用一个 RegExp 实例作为第三个参数进行调用。 - Casimir et Hippolyte

1
"

\"[ID]\" - 这基本上在正则表达式中翻译为[ID],因为在JavaScript中反斜杠被用作转义字符。

"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接