(?:pattern) 
匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。 (?=pattern) 
正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 (?!pattern) 
负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始  

解决方案 »

  1.   

    我就是msdn没看明白才来问的,请最好就我的代码说明一下。
      

  2.   

    /windows(?:95|98|NT|2000)a/可以匹配windows95a
    这个不用说了吧??:仅仅表示括号内的内容不用捕获供以后使用。
    /windows(?=95|98|NT|2000)a/为什么不能匹配windows95a
    对于这个,alert("windows95".match(/windows(?=95|98|NT|2000)/ig))可以看到,只显示了windows,并没有包括95,文档说明是:“找到一个匹配后,紧接匹配到的文字(而不包括预查中使用的字符)就开始对下一次匹配的搜索。例如,如果上面所示的表达式匹配到 'Windows 98',则将从 'Windows' 而不是 '98' 之后继续查找。”不知道是否可以理解为这个匹配的是后边跟着一个95|98|NT|2000的windows字串?另外,我发现后便如果加上任何东西,比如你的那个a,就不再匹配了,不知道是不是还有别的要求……