你们说这俩个的结果一样吗?
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)
练习场景
- 现在验证一个密码,不能全部包含数字,也不能全部包含字母,但是数字和字母却可以。