【问题标题】:JavaScript Regex: Escape the string "c++"?JavaScript 正则表达式:转义字符串“c++”?
【发布时间】:2015-06-23 07:48:46
【问题描述】:

我正在为输入文本字段编写一些正则表达式,但在转义“+”或“?”等特殊字符时遇到了一些麻烦。

我已经使用了thesetwo 问题,它们适用于 c+ 之类的字符串,但如果我输入 c++,我会收到以下错误控制台Invalid regular expression: /c++/: Nothing to repeat

代码如下:

$('input').keyup(function(){
   var val = $(this).val().trim().toLowerCase();
    // from: https://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
    //val.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');

    //from: https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
    val = val.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");

    var re = new RegExp(val, 'ig');
    console.log(re);
});

这是jsFiddle example of the issue

谢谢

【问题讨论】:

    标签: javascript regex escaping


    【解决方案1】:

    您的代码中存在错误。由于字符串在 JavaScript 中是不可变的,replace 不会更改它,而是返回一个新字符串。您进行了替换,但您没有获取返回值

    改变

    val.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
    

    val = val.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
    

    Demonstration

    【讨论】:

    • 哦,是的,我觉得很傻。非常感谢:-)
    【解决方案2】:

    您的正则表达式很好,您只是丢弃了替换调用的结果。 替换为val = val.replace(...);

    工作fiddle

    【讨论】:

    • 非常感谢 - 这很简单 :-)
    猜你喜欢
    • 2010-09-21
    • 1970-01-01
    相关资源
    最近更新 更多