2014-06-17 28 views
4

我想替换这样的:这个 “ad231-3213-e12211” “[ID]”JavaScript的正则表达式支架

我用正则表达式:/\[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); 
}; 

而他们都没有工作,我失踪了什么?

+1

使用'“\\ [ID \\]”' – hjpotter92

+0

谢谢,后一个答案,为什么你要做到这一点,我将接受它 –

回答

4

由于您将字符串传递给您的RegExp构造函数,因此您还需要在字符串中跳过\字符。因此,使用\\[这实际上会变成\[里面的字符串变量;而\[只会成为[

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

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

2

可以肯定的:

如果你想更换一个固定的子像[ID]你根本不需要regex,你可以简单地写:

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

(这取决于你想有行为)

+0

这是一个非常有趣的答案,我唯一要说的是使用正则表达式可以打开更多的替换选项。如果'[ID]'不够好,那么它可能必须变得更复杂。 –

+0

@ No1_Melman:可以使用RegExp实例作为第三个参数调用这两个函数。 –