正则表达式 - 如何反转为NOT

时间:2017-08-21 15:56:01

标签: javascript regex

我正在尝试编写一个正则表达式,我可以将一些规则链接在一起。我需要验证一个数字字符串,以检查它是否与一些规则不匹配。

我需要它:

  1. 不以3个零开始
  2. 不以4个零结尾
  3. 不是全部相同的数字
  4. 这是我到目前为止所做的:

    var re = new RegExp(/^(.)\1{8}$|^000|0000$/);
    
    re.test("111111111"); // true; all same digit
    re.test("000112222"); // true; starts with zeroes
    re.test("111110000"); // true; ends in zeroes
    re.test("123456789"); // false
    re.test("111223344"); // false
    

    这适用于前三种情况,产生TRUE,除非符合3条规则,否则如何将测试反转为假?

    (我知道我可以在JS中用!翻转它,我正在寻找一个正则表达式解决方案)

1 个答案:

答案 0 :(得分:5)

将所有规则放在一起,您可以使用此正则表达式:

/^(?!0{3})(?!.*0{4}$)(\d)(?!\1*$)\d*$/gm

RegEx Demo

RegEx分手:

^           # start
(?!0{3})    # negative lookahead to assert failure when we have 3 0s at start
(?!.*0{4}$) # negative lookahead to assert failure when we have 4 0s at end
(\d)        # match a digit and capture in group #1
(?!\1*$)    # negative lookahead to assert we don't have same digit until end 
\d*         # match zero or more digits
$           # end