84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
var str = '1a2b3c4d5e6f', reg = /\d\w\d/g; console.log(str.match(reg));
得到的结果是["1a2", "3c4", "5e6"]一: 为什么这里不包括2b3,4d5?二: 如果我想要2b3,4d5这个怎么解决(我用过exec()也是这么个德行)
["1a2", "3c4", "5e6"]
望各位解答,谢谢
我来回答吧,
关于第一个问题,因为在 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; }
匹配完1a2,lastIndex值为3,就是说第二次匹配从b开始了,所以匹配不到2b3,其余同理
我来回答吧,
关于第一个问题,因为在 js 正则表达式中,全局匹配,被匹配过的内容,将不再参与下次匹配,这个由 lastIndex 来控制,MDN 上关于 lastIndex 在这里。
额外:另外正则表达式有一个正向预查,预查的内容不参与匹配,只是一个判断规则,你可以具体了解一下。
第二个问题,通过改变 lastIndex 可以实现你的效果,用 exec,不过也只是针对这个正则表达式,如下:
匹配完1a2,lastIndex值为3,就是说第二次匹配从b开始了,所以匹配不到2b3,其余同理