问题:

"baddad".match(/([bd]ad?)*/)

为什么匹配的是dad而不是bad。

回答:

不是不匹配bad,而是已经匹配过了,* 号为贪婪模式,所以第一次匹配到 bad 之后会继续往后吞并字符,最后发现后面还有一个 dad 也适合,于是便把 baddad 全部匹配了,第二次匹配是分支匹配,前面的 [bd] 是两个分支,刚才第一个分支已经匹配完了,进入第二个分支
,也就是匹配 dad,所以第二个结果是dad就显而易见了。