负向预查的运用后笔记

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}$)/

 

----个人感觉的部分,不知道是否正确,希望看到笔记的师兄提点。

你可能感兴趣的:(负向预查的运用后笔记)