【问题标题】:Not able to escape characters in my regex [duplicate]无法在我的正则表达式中转义字符[重复]
【发布时间】:2020-09-23 02:46:30
【问题描述】:

我正在尝试处理反斜杠,以便能够将 \t(single) 转换为 \t (double \) 但此代码 /regex 不起作用。你能帮我解决我做错的地方吗?

var a = {"value": '[{"skill":"\tAgile,Scrum", "exp": 2}, {"skill": "Coding", "exp": 10 }]'};


a.value = a.value.replace(/\\/g, "\\\\"); //handle special char

console.log(a);

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    您的字符串中没有任何文字反斜杠。例如,\tAgile,Scrum 等价于与Agile,Scrum 连接的制表符。字符串中没有反斜杠,因此匹配文字反斜杠的/\\/g 将不匹配任何内容。

    您必须改为匹配已解释的字符,例如 \t,并将它们替换为文字反斜杠,后跟文字 t

    var a = {"value": '[{"skill":"\tAgile,Scrum", "exp": 2}, {"skill": "Coding", "exp": 10 }]'};
    
    a.value = a.value.replace(/\t/g, "\\t"); //handle special char
    
    console.log(a);

    您必须写出要替换的每个字符。如果您有一堆(例如\t\r\n\v 等),您可能会发现从将字符映射到它们的替换值并从中构造模式的对象开始更简洁,例如:

    const replacements = {
      '\t': '\\t',
      '\r': '\\r',
      // etc
    };
    

    【讨论】:

      【解决方案2】:

      因为\t 已经被解析并处理为\t 字符(我相信是桌面)。寻找\t

      var a = {
        "value": '[{"skill":"\tAgile,Scrum", "exp": 2}, {"skill": "Coding", "exp": 10 }]'
      };
      
      a.value = a.value.replace(/\t/g, "\\t"); //handle special char
      
      console.log(a);

      或者你可以使用反引号字符串:

      var a = {
        "value": `[{"skill":"\tAgile,Scrum", "exp": 2}, {"skill": "Coding", "exp": 10 }]`
      };
      
      console.log(a);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-15
        • 2013-02-25
        • 2011-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多