预搜索分为正向预搜索和反向预搜索。

正向预搜索: “(?=xxxxx)” , “(?!xxxxx)” 格式: “(?=xxxxx)” ,在被匹配的字符串中,它对所处的 “ 缝隙 “ 或者 “ 两头 “ 附加的条件是:所在缝隙的右侧,必须能够匹配上 xxxxx 这部分的表达式。因为它只是在此作为这个缝隙上附加的条件,所以它并不影响后边的表达式去真正匹配这个缝隙之后的字符。这就类似 “\b” ,本身不匹配任何字符。 “\b” 只是将所在缝隙之前、之后的字符取来进行了一下判断,不会影响后边的表达式来真正的匹配。

举例 :表达式 “Windows (?=NT XP)” 在匹配 “Windows 98, Windows NT, Windows 2000” 时 ,将只匹配 “Windows NT” 中的 “Windows “ ,其他的 “Windows “ 字样则不被匹配。

反向预搜索: “(?<=xxxxx)” , “(?<!xxxxx)” 这两种格式的概念和正向预搜索是类似的,反向预搜索要求的条件是:所在缝隙的 “ 左侧 “ ,两种格式分别要求必须能够匹配和必须不能够匹配指定表达式,而不是去判断右侧。与 “ 正向预搜索 “ 一样的是:它们都是对所在缝隙的一种附加条件,本身都不匹配任何字符。

举例 :表达式 “(?<=\d{4})\d+(?=\d{4})” 在匹配 “1234567890123456” 时,将匹配除了前 4 个数字和后 4 个数字之外的中间 8 个数字。

由于 JScript.RegExp 不支持反向预搜索,因此,本条举例不能够进行演示。很多其他的引擎可以支持反向预搜索,比如: Java 1.4 以上的 java.util.regex 包.