How can I invert a regular expression in JavaScript?

后端 未结 4 1934
野趣味
野趣味 2020-11-27 03:46

I have a string A and want to test if another string B is not part of it. This is a very simple regex whose result can be inverted afterwards.

I could do:



        
相关标签:
4条回答
  • 2020-11-27 04:21

    Try:

    /^(?!.*foobar)/.test('foobar@bar.de')
    

    A (short) explanation:

    ^          # start of the string 
    (?!        # start negative look-ahead
      .*       # zero or more characters of any kind (except line terminators)
      foobar   # foobar
    )          # end negative look-ahead
    

    So, in plain English, that regex will look from the start of the string if the string 'foobar' can be "seen". If it can be "seen" there is no* match.

    * no match because it's negative look-ahead!

    More about this look-ahead stuff: http://www.regular-expressions.info/lookaround.html But Note that JavaScript only supports look-aheads, no look-behinds!

    0 讨论(0)
  • 2020-11-27 04:28

    If what you're searching for really isn't more complicated than a simple string like "foobar":

    if (yourString.indexOf("foobar") === -1) {
      // ...
    }
    

    http://www.w3schools.com/jsref/jsref_indexOf.asp

    0 讨论(0)
  • 2020-11-27 04:30

    Here's an example of an inequality. First I isolate the operator '<', later the operands 'a' and 'b'. Basically, I take the direct expression, include it into right parentheses, invert the latter by '^' and finally embed the resulting expression into square brackets, 'cause the '^' at the beginning would be interpreted differently.

    var _str = "a < b" ;
    var _op = /</g ;
    var _no_op = /[^(<|\ )]/g ;
    console.log( _str, _str.match( _op ) ); // get '<'
    console.log( _str, _str.match( _no_op ) ); // get 'a', 'b'
    

    P.s.: I just added the blank space in the inverse expression, in order to retrieve exact matching for the operands.

    0 讨论(0)
  • 2020-11-27 04:32
    ^(?!.*(word1|word2|word3))
    

    will match a string that does not contain any of word1, word2, or word3 (and you can extend the list indefinitely). But this also matches null strings. To reject nulls use

    ^(?!$)(?!.*(word1|word2|word3))  
    
    0 讨论(0)
提交回复
热议问题