1,格式(?!pattern)
2,定义
负向预查,在任何不匹配pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
3,运用中找到的规律
() 括号前面 需要有字符 如果没有 就 加上 ^
可以连续加多个负向预查 ^(?!pattern)(?!pattern) 两个预查是“并行的”,因为预查不消耗字符,预查不消耗字符,预查不消耗字符(重要的事情说三次)
4,运用
10,20个(数字 字母 特殊字符 三者缺一不可)组成的字符串
/^(?![数字|特殊字符]+$)(?![数字|字母]+$)(?![字母|特殊字符]+$)(^[数字|特殊字符|字母]{10,18}$)/
解释:从第一个字符开始进行三次负向预查,如果字符串有 数字 或 特殊字符 组成 ,,组成,,,组成,都会被否定,必须由三种类型同时存在的情况下 才OK。
4.1注意 /^(?!patternA1&)(?!patternA2&)patternB/ 第一个 ^非常重要,如果没有它,就没有需要的效果,如果不加^,也可以 加固定字符, 个人感觉:"负向预查"之前必须带东西,不然预查就找不到”方向“了。
4.2 个人感觉 负向预查中的 ?! 优先级非常高 但是 没有括号高所以 如果想把多次预查 放到一起,外面就必须加上括号
/^(?!([数字|特殊字符]+|[数字|字母]+|[字母|特殊字符]+)$)(^[数字|特殊字符|字母]{10,18}$)/
----个人感觉的部分,不知道是否正确,希望看到笔记的师兄提点。