在学习javascript正则时,虽折腾了不少时间,但还是不太理解alert("baddad".match(/([bd]ad?)*/))为何输出baddad,dad。希望各位能够给予帮助,非常感谢,当然,各位如有更多疑问也可提出,大家共同探讨进步。多谢javascript正则

解决方案 »

  1.   

    ([bd]ad?)*  , 这个以a为中心看好理解  [bd] a前b或d, d? 可以有d , ([bd]ad?)*  这样的组合 0~n次
     baddad 全中,分两次   bad dad ,最后一个组1 dad ,所以  baddad,dad
      

  2.   

    不能用alert调试,alert很容易让人误解的。
    看这是什么。
    "baddad".match(/([bd]ad?)*/))
      

  3.   

    不能改,应该看这
    var $b = ['dd','b'];
    alert($b);
      

  4.   

    一层一层的看
    [bd]   #是bd中取其中的一个
    a      #是a必须要有
    d?     #d可以出现0次或者1次这样出来的 bad dad ba da 了
    然后 后面还有一个星号*  也就是前面这四个 可以出现0次或者多次所以baddad,dad 就会被匹配出来了
      

  5.   

    <!DOCTYPE html>
    <html>
    <head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
    </script>
    <script>
    var matchs = 'baddad'.match(/([bd]ad?)/g);
    alert(matchs[0] +' ' + matchs[1]+' ');
    var reg = /([bd]ad?)*/g;
    reg.test('badlad');
    alert(RegExp.$1);
    </script>
    </head>
    <body></body>
    </html>baddad好理解,*?也是贪禁模式,全部匹配时会尽可能多匹配
    关键是dad
    分组里面只去一种,里面可能的情况是bad,dad,取第二种,dad
      

  6.   

    你这个正则虽然简单,但是涉及的东西很多保存 贪婪模式、分组、匹配模式等。可以比较:
    "baddad".match(/(?:[bd]ad?)*/);
    "baddad".match(/([bd]ad?)?/);
    "baddad".match(/([bd]ad?)?/g);
    "baddad".match(/([bd]ad?)*/g);
    参考 http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html