javascript regexp&结果中的额外字符

时间:2016-10-21 14:00:30

标签: javascript regex string replace escaping

我想在字符串中找到子字符串并将它们全部替换掉​​。子字符串包含一些特殊字符($)。我使用正则表达式并得到一些(对我来说)意想不到的结果。

请告诉我我的错误。

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$$] ===

1 个答案:

答案 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);