看正则的时候,遇到一些理解上的疑惑,一个是
*? +?
MDN上的解释为
Matches like * and + from above,however the match is the smallest possible match.
如*,+一样的匹配前面项,匹配是最小可能。
另外一个疑惑是参数g,这个的解释是全局模式,但全局模式究竟是什么意思呢,最小匹配又是什么意思呢?
先从最小匹配的例子开始看一下:
var re = /".*?"/; '"foo""bar"'.match(re) //return "foo"
MDN对最小匹配使用的是如上的例子,上例如果不用?最小匹配,则匹配不到"foo",我们来试一下
var re = /".*"/; '"foo""bar"'.match(re) //return "foo""bar"
可见,如果不使用最小匹配,匹配一直进行到了字符串最后一个",前面的"被忽视掉,这种模式成为贪婪模式,就是有多少匹配多少,当*或者+ 后面带?,则采用最小匹配,当查找到第一次成功的匹配,就将匹配结果返回。
那么,全局匹配在这个例子里会产生什么样的效果呢?
var re = /".*?"/g; '"foo""bar"'.match(re) //return [""foo"",""bar""]
最小匹配下本来只能匹配出第一个foo,而加上全局匹配,匹配会继续进行,将后面的bar也匹配了出来。这或许就是全局匹配的一个应用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。