正则表达式 : “双重否定就是肯定吗?”

你们说这俩个的结果一样吗?

 var a=/[a]/;
    var b='a';
    var c='ab';
    console.log(a.test(b));
    console.log(a.test(c));

  var a2=/[^a]/;            
    var b2='a';              
    var c2='ab';
    console.log(!a2.test(b2));
    console.log(!a2.test(c2));
      
  • 有的同学就纳闷了,双重否定,不就是肯定吗?这俩个结果肯定是一样啊,是吗?我们来分析一下;
    “!“意思是取反的,这个同学们都知道的。
    正则表达式”[]“里面的”^”,意思是除它以外其他的,有点像取反但却不是取反。

我们先来分析一下"b"和"c" ;

  • a= /[a]/ 是只要包含’a’结果就为真。
    b=‘a’ 包含有’a’结果为真(true)
    b=‘ab’ 虽然有’b’,但里面也包含’a’,所以结果为真(true)
  var a=/[a]/;
    var b='a';
    var c='ab';
    console.log(a.test(b));//(true)
    console.log(a.test(c));//(true)

我们再来分析 " ^ " ;

  • a1=/[^a]/ 是取’a’以外的其他的,也就是只要包含’a’以外其他的结果就为真。
    b1=‘a’ 里面没有’a’以外其他的,所以结果为假(false)
    c1=‘ab’因为里面包含有其他的’b’,即使包含’a’也没关系,只要有其他的,结果为就真(true)
   var a1=/[^a]/;              
    var b1='a';              
    var c1='ab';
    console.log(a1.test(b1));//(false)
    console.log(a1.test(c1));//(true)

最后再来分析"^"+"!" ;

  • 我们把’!'后面的看作一个整体,是不是发现看 'a1’和’a2’一样,我们刚刚已经算过了’b1’和’c1’的结果了,我们直接取下反就是’b2’和’c2’的值了。

  • !a2.test(b2)=!(false) 结果为真(ture);
    !a2.test(c2)=!(ture) 结果为假(false);

    var a2=/[^a]/;            
    var b2='a';              
    var c2='ab';
    console.log(!a2.test(b2));//(true)
    console.log(!a2.test(c2));//(false)

现在我们来看"a"和"a2"的结果还一样吗?

  • 前者是俩个真(true)(true)
    后者是一真一假(true)(false)

练习场景

  • 现在验证一个密码,不能全部包含数字,也不能全部包含字母,但是数字和字母却可以。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值