原始规定
  1. (pattern)匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用\(或\)。
  2. (?:pattern)匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
  3. (?=pattern)正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
  4. (?!pattern)正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
  5. (?<=pattern)反向肯定预查,与正向肯定预查类拟,只是方向相反。
  6. 反向否定预查,与正向否定预查类拟,只是方向相反。
解读
  1. (pattern)匹配这个格式就可以了
  2. (?:pattern)和一差不多,匹配这个pattern格式
  3. (?=pattern)继续向正向找,如果这个后面跟着这个pattern格式,怎么把前面的那个字符拿出来,pattern中的内容不算匹配到的字符
  4. (?!pattern)和3相反,后面不跟着这个pattern格式,把前面的字符拿出来
  5. (?<=pattern)反向肯定预查,与正向肯定预查类拟,只是方向相反。
  6. 反向否定预查,与正向否定预查类拟,只是方向相反。

在以下文本域中都分别输入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. 测试案例