\w 匹配包括下划线的任何单词字符。等价于 '[A-Za-z0-9_]'。 (?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 \num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。

解决方案 »

  1.   

    \1 代表 "反向引用"。意思是,第一组括号(在这里是 \w )匹配到了什么内容,则 \1 必须匹配一样的内容。比如,在匹配 "fffff" 时,当 \w 匹配第一个 'f' 后,后边的 \1 都必须匹配 'f'(?=\1\1\1) 表示 "正向预搜索",表示该位置右边,必须能够匹配 \1\1\1。如果前面的 \w 匹配了1个 'f',则 (?=\1\1\1) 要求右侧必须有 'fff'。这只是对这个缝隙的条件,实际上并没有进行匹配。真正进行匹配的是旁边的 \1。整体来说,"(?=\1\1\1)\1" 的意思是:"如果右边有 3 个 'f' ,则匹配 1 个 'f' "
    搂主可以在此基础上进行修改,然后看匹配的效果,以此来增进理解:
    http://www.regexlab.com/zh/regref.htm
      

  2.   

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