How to properly escape characters in regexp

后端 未结 4 1817
失恋的感觉
失恋的感觉 2020-11-30 08:59

I want to do a string search inside a string. Simply saying MySTR.search(Needle).

The problem occurs when this needle string contains speci

相关标签:
4条回答
  • 2020-11-30 09:33

    Duplicate of https://stackoverflow.com/a/6969486/151312

    This is proper as per MDN (see explanation in post above):

    function escapeRegExp(str) {
      return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
    }
    
    0 讨论(0)
  • 2020-11-30 09:44

    I performed a quick Google search to see what's out there and it appears that you've got a few options for escaping regular expression characters. According to one page, you can define & run a function like below to escape problematic characters:

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

    Alternatively, you can try and use a separate library such as XRegExp, which already handles nuances you're trying to re-solve.

    0 讨论(0)
  • 2020-11-30 09:45

    \Q...\E doesn't work in JavaScript (at least, they don't escape anything...) as you can see:

    var s = "*";
    print(s.search(/\Q*\E/));
    print(s.search(/\*/));
    

    produces:

    -1
    0
    

    as you can see on Ideone.

    The following chars need to be escaped:

    • (
    • )
    • [
    • {
    • *
    • +
    • .
    • $
    • ^
    • \
    • |
    • ?

    So, something like this would do:

    function quote(regex) {
      return regex.replace(/([()[{*+.$^\\|?])/g, '\\$1');
    }
    

    No, ] and } don't need to be escaped: they have no special meaning, only their opening counter parts.

    Note that when using a literal regex, /.../, you also need to escape the / char. However, / is not a regex meta character: when using it in a RegExp object, it doesn't need an escape.

    0 讨论(0)
  • 2020-11-30 09:45

    I'm just dipping my feet in Javascript, but is there a reason you need to use the regex engine at all? How about

    var sNeedle = '*Stars!*';
    var sMySTR = 'The contents of this string have no importance';
    if ( sMySTR.indexOf(sNeedle) > -1 ) {
       //found it
    }
    
    0 讨论(0)
提交回复
热议问题