js中继续正则表达式的疑问?

wververerew 2013-01-12 10:45:21
alert("baddad".match(/([bd]ad?)*/))//baddad,dad


为什么会有这样的输出?不是应该baddad,bad,dad吗?
...全文
165 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tzg157 2013-01-14
  • 打赏
  • 举报
回复
/([bd]ad?)*/ *是贪婪模式的,他会首先匹配尽可能多的字符,所以,在匹配到bad后,由于"*",它会继续拿([bd]ad?)去匹配后面的字符。
tzg157 2013-01-14
  • 打赏
  • 举报
回复
/([bd]ad?)*/g:*会尽可能多的匹配字符,所以只要这个字符串符合匹配条件,*就会把整个字符串匹配上。因为有g(全局模式),它可以规定从希望的位置开始匹配字符 /([bd]ad?)/g:当([bd]ad?)表达式匹配完成后,由于g模式的村子,所以它会将下一次匹配的位置从上一次匹配后的最后一个位置开始,即字符串'bad'后开始匹配。再次匹配时,就会匹配dad了。
wververerew 2013-01-14
  • 打赏
  • 举报
回复
为什么
[bd]ad?)*/g
却显示
baddad,
/([bd]ad?)/g
又显示
bad,dad
wververerew 2013-01-14
  • 打赏
  • 举报
回复
引用 2 楼 fzfei2 的回复:
你要 bad,dad,改成 alert("baddad".match(/([bd]ad?)/g)) 你不是用全局匹配,分组是最后一次定位那个 先是命中 "bad"再"dad" ,所以组1=dad
但若表达式为:
/([bd]ad?)?/g
为什么显示bad,dad,呢?
fzfei2 2013-01-13
  • 打赏
  • 举报
回复
你要 bad,dad,改成 alert("baddad".match(/([bd]ad?)/g)) 你不是用全局匹配,分组是最后一次定位那个 先是命中 "bad"再"dad" ,所以组1=dad
fzfei2 2013-01-13
  • 打赏
  • 举报
回复
你要 bad,dad,改成 alert("baddad".match(/([bd]ad?)/g)) 你是用全局匹配,分组是最后一次定位那个 先是命中 "bad"再"dad" ,所以组1=dad
wververerew 2013-01-13
  • 打赏
  • 举报
回复
引用 1 楼 fzfei2 的回复:
你要 bad,dad,改成 alert("baddad".match(/([bd]ad?)/g)) 你是用全局匹配,分组是最后一次定位那个 先是命中 "bad"再"dad" ,所以组1=dad
那么

alert("baddad".match(/([bd]ad*)*/g));
这个为什么会输出:badd,,,
似梦飞花 2013-01-13
  • 打赏
  • 举报
回复
其实这个不是正则的问题是match方法的问题 你看下jsmatch的匹配方式试试

87,991

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧