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

本文介绍了贪婪与非贪婪模式在正则表达式中的匹配行为。贪婪模式会尽可能多的匹配字符,而非贪婪模式则尽可能少地匹配。通过示例展示了两者在处理HTML片段时的区别,解释了如何根据需求选择合适的匹配模式。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值