【问题标题】:javascript regexp & extra characters in result结果中的javascript正则表达式和额外字符
【发布时间】:2017-03-03 21:11:17
【问题描述】:

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

请告诉我我的错误在哪里。

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

【问题讨论】:

    标签: javascript regex string replace escaping


    【解决方案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);

    【讨论】:

    • 以及通用解决方案是否可行? $$ 之后除了可能还有其他“危险”字符?
    • 仅限$。这被称为美元转义,这是唯一的警告。
    猜你喜欢
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多