原始规定
- (pattern)匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用\(或\)。
- (?:pattern)匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
- (?=pattern)正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
- (?!pattern)正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
- (?<=pattern)反向肯定预查,与正向肯定预查类拟,只是方向相反。
- 反向否定预查,与正向否定预查类拟,只是方向相反。
解读
- (pattern)匹配这个格式就可以了
- (?:pattern)和一差不多,匹配这个pattern格式
- (?=pattern)继续向正向找,如果这个后面跟着这个pattern格式,怎么把前面的那个字符拿出来,pattern中的内容不算匹配到的字符
- (?!pattern)和3相反,后面不跟着这个pattern格式,把前面的字符拿出来
- (?<=pattern)反向肯定预查,与正向肯定预查类拟,只是方向相反。
- 反向否定预查,与正向否定预查类拟,只是方向相反。
在以下文本域中都分别输入watermelon,melonwatermelon,watermeln,melnwatermeln,water,melonwater和melnwater试试,或者其他测试关于water与melon的组合案例多试试,应该就会明白这几个的区别。
1.(pattern)就是把pattern当作一个整体匹配
/water(melon)/ig 测试案例
2.(?:pattern)就是把pattern当作一个整体匹配。
/water(?:melon)/ig 测试案例
3.(?=pattern)的示例,就是必须出现pattern匹配时,整个匹配才会发生,但是不把其存储。
/water(?=melon)/ig 测试案例
4.(?!pattern)正好与上例相反,要不出现pattern时,整个匹配才会发生,这两个都叫预查,(?!pattern)算是[^]的扩展(因为[^pattern]是p,a,t,t,e,r,n都不能出现)
/water(?!melon)/ig 测试案例
5.(?<=pattern)的示例,反向肯定预查,与正向肯定预查类拟,只是方向相反。
5.1. /water(?<=melon)/ig 测试案例
5.2. /(?<=melon)water/ig 测试案例
6.把上例的等号换成左尖角括号正好与上例相反,反向否定预查,与正向否定预查类拟,只是方向相反。
6.1. 测试案例
6.2. 测试案例