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

本文介绍了正则表达式中的贪婪模式和非贪婪模式,讲解了它们的匹配规则和区别。通过实例解析了贪婪模式如何尽可能多地匹配内容,而非贪婪模式则尽可能少地匹配。同时,文章提供了实例练习,帮助读者加深理解,包括提取HTML标签和处理引号之间的子串。文章还讨论了回溯现象和匹配失败的情况,强调在实际应用中选择合适的模式以优化性能。
摘要由CSDN通过智能技术生成

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

前言

本文属于 正则表达式系列文章之一,更多请前往 正则表达式系列

贪婪模式和非贪婪模式是正则匹配中的重要特性 在理解贪婪和非贪婪的区别时,可以根据实例,一步一步的循序渐进

大纲

  • 匹配规则简介

  • 贪婪模式与非贪婪模式快速理解

  • 实例练习

  • 回溯现象与匹配失败

匹配规则简介

var str='aabcab';
var reg=/ab/;
var res=str.match(reg);

// ab index 为 1
console.log(res);

要快速理解正则的匹配规则,可以先尝试理解上述的例子

匹配步骤是这样的:

  • 初始index=0,匹配到了字符a

  • 接下来匹配下一个字符a,但是由于aa/ab/不匹配,因此此次匹配失败

  • index挪到下一个,从1开始,又重新匹配了a

  • 接下来匹配下一个字符b,刚好和/ab/匹配,因此此次匹配成功,返回了abindex=1

  • 如果正则的匹配后面有g这种关键字,则会继续开始下一组的匹配(但是本例中没有g,因此只有一组结果)

要点

  • 最先开始的匹配拥有最高的优先权

这一个要点的详细解释是: 例如第一个匹配的字符是a,假设之后的匹配没有出现匹配失败的情况。则它将一直匹配下去,直到匹配完成,也就是说index=0不会变,直到匹配完成(如果出现匹配失败并且无法回溯,index才会继续往下挪)

这一点适用于下面的贪婪模式与非贪婪模式中(并且优先级高于它们),因此请谨记

贪婪模式与非贪婪模式快速理解

贪婪匹配模式

定义

正则表达式去匹配时,会尽量多的匹配符合条件的内容

标识符

+?*{n}{n,}{n,m}

匹配时,如果遇到上述标识符,代表是贪婪匹配,会尽可能多的去匹配内容

示例

var str='aacbacbc';
var reg=/a.*b/;
var res=str.match(reg);

// aacbacb index为0
console.log(res);

上例中,匹配到第一个a后,开始匹配.*,由于是贪婪模式,它会一直往后匹配,直到最后一个满足条件的b为止,因此匹配结果是aacbacb

示例2

var str='aacbacbc';
var reg=/ac.*b/;
var res=str.match(reg);

// acbacb index为1
console.log(res);

第一个匹配的是a,然后再匹配下一个字符a时,和正则不匹配,因此匹配失败,index挪到1,接下来匹配成功了ac,继续往下匹配,由于是贪婪模式,尽可能多的去匹配结果,直到最后一个符合要求的b为止,因此匹配结果是acbacb

非贪婪匹配模式

定义

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值