alert("baddad".match(/([bd]ad?)*/))//baddad,dad为什么会有这样的输出?不是应该baddad,bad,dad吗?

解决方案 »

  1.   

    你要 bad,dad,改成 alert("baddad".match(/([bd]ad?)/g))
    你是用全局匹配,分组是最后一次定位那个
    先是命中 "bad"再"dad" ,所以组1=dad
      

  2.   

    你要 bad,dad,改成 alert("baddad".match(/([bd]ad?)/g))
    你不是用全局匹配,分组是最后一次定位那个
    先是命中 "bad"再"dad" ,所以组1=dad
      

  3.   

    其实这个不是正则的问题是match方法的问题  你看下jsmatch的匹配方式试试
      

  4.   


    那么alert("baddad".match(/([bd]ad*)*/g));
    这个为什么会输出:badd,,,
      

  5.   

    /([bd]ad?)*/ 
    *是贪婪模式的,他会首先匹配尽可能多的字符,所以,在匹配到bad后,由于"*",它会继续拿([bd]ad?)去匹配后面的字符。
      

  6.   


    但若表达式为:/([bd]ad?)?/g为什么显示bad,dad,呢?
      

  7.   

    为什么[bd]ad?)*/g却显示baddad,
    而/([bd]ad?)/g又显示bad,dad?
      

  8.   

    /([bd]ad?)*/g:*会尽可能多的匹配字符,所以只要这个字符串符合匹配条件,*就会把整个字符串匹配上。因为有g(全局模式),它可以规定从希望的位置开始匹配字符
    /([bd]ad?)/g:当([bd]ad?)表达式匹配完成后,由于g模式的村子,所以它会将下一次匹配的位置从上一次匹配后的最后一个位置开始,即字符串'bad'后开始匹配。再次匹配时,就会匹配dad了。