正则表达式——贪婪与非贪婪模式

1. 概述

贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为。
贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配(最大范围匹配);
非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配(最小范围匹配);

2. 贪婪与非贪婪模式匹配举例

eg:
源字符串:aa<div>test1</div>bb<div>test2</div>cc
正则一:<div>.*</div>

let str='aa<div>test1</div>bb<div>test2</div>cc'
let reg = '<div>.*</div>'
console.log(str.match(reg)[0])
// 输出:<div>test1</div>bb<div>test2</div>

正则二:<div>.*?</div>

let str='aa<div>test1</div>bb<div>test2</div>cc'
let reg = '<div>.*?</div>'
console.log(str.match(reg)[0])
// 输出:<div>test1</div>

(这里指的是一次匹配结果,所以没包括<div>test2</div>)
从上例可以看出:
正则一采用的贪婪模式,在匹配到第一个“</div>”时已经可以使整个表达式匹配成功,但是由于采用的是贪婪模式,所以仍然要向右尝试匹配,查看是否还有更长的可以成功匹配的子串,匹配到第二个“</div>”后,向右再没有可以成功匹配的子串,匹配结束,匹配结果为“<div>test1</div>bb<div>test2</div>”。
正则二采用的是非贪婪模式,在匹配到第一个“</div>”时使整个表达式匹配成功,由于采用的是非贪婪模式,所以结束匹配,不再向右尝试,匹配结果为“<div>test1</div>”。


更多详细介绍参考链接:
https://blog.csdn.net/lxcnn/article/details/4756030

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。