【问题标题】:javascript code to check special characters and add double slash before that?javascript代码检查特殊字符并在此之前添加双斜杠?
【发布时间】:2014-08-19 06:09:32
【问题描述】:

我的字符串包含一些特殊字符,需要在字符串之前使用 (\) 双反斜杠进行转义。我的一段代码如下:

var data = "abckdef)ghijkl)-8-mno-3-(pqrstuvw-1-xyz)-5-thiaa-1-aza-";
var iChars = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?~_";
for (var i = 0; i < data.length; i++) {
    if (iChars.indexOf(data.charAt(i)) != -1) {
        console.log("Your string has special characters. \nThese are not allowed.");
        return false;
    }
}

预期结果是:

abckdef\)ghijkl\)\-8\-mno\-3\-\(pqrstuvw\-1\-xyz\)\-5\-thiaa\-1\-aza\-

上面的代码在我的字符串中找到了特殊字符,但我想在每次出现特殊字符之前添加 (\\)。有什么帮助吗?

【问题讨论】:

    标签: javascript regex special-characters


    【解决方案1】:

    使用正则表达式替换:

    匹配:

    /[!@#$%^&*()+=\-[\]\\';,./{}|":<>?~_]/
    

    替换为:

    \$&
    
    >>> data.replace(/[!@#$%^&*()+=\-[\]\\';,./{}|":<>?~_]/g, "\\$&")
    ... "abckdef\)ghijkl\)\-8\-mno\-3\-\(pqrstuvw\-1\-xyz\)\-5\-thiaa\-1\-aza\-"
    

    【讨论】:

    • 如果你不显示replace调用,你就知道人们会使用"\$&amp;"作为替换字符串...
    • @AvinashRaj 好主意,这是一个非常巧妙的技巧,特别是对于正则表达式高尔夫。
    • 如果我想要三个斜线而不是 1 怎么办
    【解决方案2】:

    正则表达式:

    ([!@#$%^&*()+=\[\]\\';,./{}|":<>?~_-])
    

    替换字符串:

    \$1
    

    DEMO

    > var data = "abckdef)ghijkl)-8-mno-3-(pqrstuvw-1-xyz)-5-thiaa-1-aza-";
    undefined
    > var result = data.replace(/([!@#$%^&*()+=\[\]\\';,./{}|":<>?~_-])/g, "\\$1");
    undefined
    > console.log(result);
    abckdef\)ghijkl\)\-8\-mno\-3\-\(pqrstuvw\-1\-xyz\)\-5\-thiaa\-1\-aza\-
    

    【讨论】:

      【解决方案3】:

      试试这个即插即用功能。

      var data = "abckdef)ghijkl)-8-mno-3-(pqrstuvw-1-xyz)-5-thiaa-1-aza-";
      
      function escapeSpecialCaseChar(text) {
         return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
      }
      

      console.log(escapeSpecialCaseChar(data));

      【讨论】:

        【解决方案4】:

        你想转义除字母数字字符以外的任何东西,然后让它变得简单

        查找内容:([^a-zA-Z0-9]) 替换:\\$1

        regex101 demo

        示例代码:

        var re = /([^a-zA-Z0-9])/g; 
        var str = 'abckdef)ghijkl)-8-mno-3-(pqrstuvw-1-xyz)-5-thiaa-1-aza-';
        var subst = '\\$1'; 
        
        var result = str.replace(re, subst);
        

        输出:(与预期相同)

        abckdef\)ghijkl\)\-8\-mno\-3\-\(pqrstuvw\-1\-xyz\)\-5\-thiaa\-1\-aza\-
        

        【讨论】:

        • @user3218114 我不得不在 regex101 项目问题跟踪器上提交一个错误,因为它们从未正确转义字符文字。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-12
        • 1970-01-01
        • 2021-09-02
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多