我想用“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);
};
它们都不起作用,我错过了什么?
答案 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中的反斜杠用作转义字符