我想在字符串中找到子字符串并将它们全部替换掉。子字符串包含一些特殊字符($)。我使用正则表达式并得到一些(对我来说)意想不到的结果。
请告诉我我的错误。
RegExp.escape = function(value) {
return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
}
var str = "[block $$text$$] ===";
var substr_old = "[block $$text$$]";
var substr_new = "[xxxxx $$text$$]";
console.log(str);
str = str.replace(RegExp(RegExp.escape(substr_old), 'g'), substr_new);
console.log(str);
结果:
before: [block $$text$$] ===
after: [xxxxx $text$] ===
为什么$ ?
我期待下一个结果:
before: [block $$text$$] ===
after: [xxxxx $$text$$] ===
答案 0 :(得分:1)
因为您需要在替换模式中使用$$
来替换单个$
。
使用
str = str.replace(RegExp(RegExp.escape(substr_old), 'g'), substr_new.replace(/\$/g, '$$$$'));
演示:
RegExp.escape = function(value) {
return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
}
var str = "[block $$text$$] ===";
var substr_old = "[block $$text$$]";
var substr_new = "[xxxxx $$text$$]";
console.log(str);
str = str.replace(RegExp(RegExp.escape(substr_old), 'g'), substr_new.replace(/\$/g, "$$$$"));
console.log(str);