因为?跟在*或+后面的时候代表的是非贪婪模式
/a+?bc/
这句的意思是
匹配一个或多个a直到bc为止

解决方案 »

  1.   

    看来我对非贪婪模式的理解有问题?
    原本我是这样理解的:/a+?bc/中a+变成了非贪婪模式,就表示只取一个a,后面紧跟bc,所以应该匹配abc才对。
      

  2.   

    或者说我想弄明白:
    /a+bc/和/a+?bc/来匹配'aaaabc'时为什么没有区别?
      

  3.   

    a+//匹配一个或多个a
    a?//匹配零个或一个a
    a*//匹配零个或多个a
    如果只想取一个a,可以用a{1}
      

  4.   

      <script>
      var reg = /bca+?/; 
    var rs = reg.exec('bcaaaa'); 
    alert(rs[0]); 
      var reg = /bca+/; 
    var rs = reg.exec('bcaaaa'); 
    alert(rs[0]); 
      </script>看这个例子对你的理解有没帮助
      

  5.   

      <script>
      var reg = /bca+?/; 
    var rs = reg.exec('bcaaaa'); 
    alert(rs[0]);    //打印bca  
    var reg = /bca+/; 
    var rs = reg.exec('bcaaaa'); 
    alert(rs[0]);    //打印bcaaaa
      </script>junp2007,你举的例子我明白
    那你说说为什么/a+bc/和/a+?bc/效果一样呢?
    var reg1 = /a+bc/;
    var reg2 = /a+?bc/;
    alert(reg1.exec('aaabc'));  //打印 aaabc
    alert(reg2.exec('aaabc'));  //打印 aaabc
      

  6.   

    就你那两个匹配式是没什么区别的
    +?为最小匹配,所以/bca+?/只对bcaaaa起作用,它匹配到第一个a就停止了往后匹配,但对于aaabc,从第一个a就开始匹配,起到bc。
    或者说+?(最小匹配),只对往后匹配起作用。