(?=pattern)一个是说接下来是
(?:pattern) 是说本身是,并不是说下一个是

解决方案 »

  1.   

    用模式 "Windows" 去 匹配一下的字符串,怎么只能匹配到第一个呢"Windows 2000, Windows XP, Windows 98, Windows 3.1"
      

  2.   

    <script language=javascript>
     var str="Windows 2000, Windows XP, Windows 98, Windows 3.1"
    alert(str.match(/Windows(?=\s*2000|\s*xp|\s*98|\s*3\.1)/ig))
    </script>
    可以匹配全部的,你的正则是什么样的?
    在这种预查中的正则是不会在结果中的
      

  3.   

    看看这个:
    声明:是秋水写的1.贪婪:+,*,?,{m,n}等默认是贪婪匹配,即尽可能多匹配,也叫最大匹配
    如果后面加上?,就转化为非贪婪匹配,需要高版本支持 2.获取:默认用(x|y)是获取匹配,很多时候只是测试,不一定要求得到所匹配的数据,
    尤其在嵌套匹配或大数据中就要用非获取匹配(?:x|y),这样提高了效率,优化了程序。 3.消耗:默认是消耗匹配,一般在预查中是非消耗匹配。
    举个例子,2003-2-8要变为2003-02-08
    如果用/-(\d)-/第二次匹配将从8开始,从而只替换第一个2,错误
    如果用/-(\d)(?=-)/则第二次匹配从第二个-开始,即不消耗字符- 4.预查:js中分为正向预查和负向预查
    如上面的(?=pattern)是正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。
    还有(?!pattern)是负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。
    负向预查有时会用在对[^]的扩充,[^]只是一些字符,而?!可以使整个字符串。 5.回调:一般用在替换上,即根据不用的匹配内容返回不用的替换值,从而简化了程序,需要高版本支持 6.引用:\num 对所获取的第num个匹配的引用。
    例如,'(.)\1\1' 匹配AAA型。'(.)(.)\2\1' 匹配ABBA型。 
      

  4.   

    用模式 "Windows" 去 匹配一下的字符串,怎么只能匹配到第一个呢"Windows 2000, Windows XP, Windows 98, Windows 3.1"------------------------------------------------------
    你得设置全局标志g,象这样:
    /Windows/g
      

  5.   

    chouchy(城市刀客)
    解决了我全局匹配的问题.
    但预测先行还不是很懂
      

  6.   

    通俗易懂的解释:
    http://www.regexlab.com/zh/regref.htm