var s = '123456789' var r1 = /(\d{3})+/ var r2 = /(\d{3})?/g s.match(r1) // ['123456789', '789'] s.match(r2) // ['123'] s.match(r2) // ['456'] s.match(r2) // ['789'] var r3 = /(\d{3})/g s.match(r3) // ['123'. '456'. '789']
第一问: r1 的匹配结果的第二项为什么是789?而不是123?
第二问: r3 的匹配结果为什么没用整个先匹配('123456789')?
已解决
悬赏分:50
- 解决时间 2021-11-28 07:13
点赞 0反对 0举报 0
收藏 0
分享 0
回答2
最佳
-
第一问。我觉得是被覆盖了。或许你想问的是贪婪模式和非贪婪模式?
第二问。/(\d{3})/g中,\d是数字,{3}代表是三个,合起来就是三个数字。
那么如何匹配整体?支持 0 反对 0 举报2021-11-27 09:48
-
var r1 = /(\d{3})+/g var r2 = /(\d{3})?/g s.match(r1) // ['123456789', '789']
在chrome下执行只会返回 ["123456789"],所以我不知道你的结果是怎么来的
- ?的意思是 0次或1次 如果匹配整个1-9,那就是3次 显然不符合,而0次又相当于没匹配到内容,所以默认匹配1次
支持 0 反对 0 举报2021-11-27 10:55