正则捕获的 贪婪性

🌙
手机阅读
本文目录结构

写在前面

正则的贪婪性,也有叫"贪心"表达式,“贪心"表达式对应的是"非贪心"表达式或者最小匹配。

正则捕获贪婪性的检测

还是之前的例子

let str = "axihe2020an06bang30";
let reg = /\d+/g;
console.log(str.match(reg));

我们运行后会发现,\d+总归捕获尽可能多的符合规则;

比如\d+这个元字符可以捕获 1 个数字,也可以捕获 2 个连续数字,也可以捕获无数个连续的数字;

但是实际运行的过程中,它尽可能的捕获到最大数量。

正则捕获的贪婪性

默认情况下,正则捕获的时候,按照当前正则匹配的最长结果来获取,这种尽可能多的获取叫正则捕获的贪婪性。

?可以取消捕获的贪婪性

试一试下面的一个正则

let reg = /\d+?/g;

例子应用

let str = "axihe2020an06bang30";
let reg = /\d+?/g;
console.log(str.match(reg));

结果是 ["2", "0", "2", "0", "0", "6", "3", "0"];

在量词元字符后设置, 取消捕获时候的贪婪性,按照正则匹配的最短结果来获取。

*、+ , ? 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

?在不同位置的不同的意义

  • ?左边是非量词元字符
    • 出现零到一次
  • ?左边是量词元字符
    • 取消捕获时候的贪婪性
  • ?: 只匹配不捕获
  • ?= 正向预查
  • ?! 反向预查

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了