巴扎黑 2017-04-10 17:32:20 0 2 476
[JavaScript讨论组] 举报 回复话题 ↕
var str = '1a2b3c4d5e6f', reg = /\d\w\d/g; console.log(str.match(reg));
得到的结果是["1a2", "3c4", "5e6"]一: 为什么这里不包括2b3,4d5?二: 如果我想要2b3,4d5这个怎么解决(我用过exec()也是这么个德行)
["1a2", "3c4", "5e6"]
望各位解答,谢谢
2
0
分享
高洛峰 采纳为最佳 2017-04-10 17:34:20 2楼
我来回答吧,
关于第一个问题,因为在 js 正则表达式中,全局匹配,被匹配过的内容,将不再参与下次匹配,这个由 lastIndex 来控制,MDN 上关于 lastIndex 在这里。
额外:另外正则表达式有一个正向预查,预查的内容不参与匹配,只是一个判断规则,你可以具体了解一下。
第二个问题,通过改变 lastIndex 可以实现你的效果,用 exec,不过也只是针对这个正则表达式,如下:
var str = '1a2b3c4d5e6f', reg = /\d\w\d/g; var a; while(a = reg.exec(str)){ console.log(a[0]) reg.lastIndex -= 1; }
赞 +0 添加回复
天蓬老师 采纳为最佳 2017-04-10 17:34:20 1楼
匹配完1a2,lastIndex值为3,就是说第二次匹配从b开始了,所以匹配不到2b3,其余同理
高洛峰 采纳为最佳 2017-04-10 17:34:20 2楼
我来回答吧,
关于第一个问题,因为在 js 正则表达式中,全局匹配,被匹配过的内容,将不再参与下次匹配,这个由 lastIndex 来控制,MDN 上关于 lastIndex 在这里。
额外:另外正则表达式有一个正向预查,预查的内容不参与匹配,只是一个判断规则,你可以具体了解一下。
第二个问题,通过改变 lastIndex 可以实现你的效果,用 exec,不过也只是针对这个正则表达式,如下:
赞 +0 添加回复
天蓬老师 采纳为最佳 2017-04-10 17:34:20 1楼
匹配完1a2,lastIndex值为3,就是说第二次匹配从b开始了,所以匹配不到2b3,其余同理
赞 +0 添加回复