正则捕获的 贪婪性
写在前面
正则的贪婪性,也有叫"贪心"表达式
,“贪心"表达式对应的是"非贪心"表达式或者最小匹配。
正则捕获贪婪性的检测
还是之前的例子
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"]
;
在量词元字符后设置?
, 取消捕获时候的贪婪性,按照正则匹配的最短结果来获取。
*、+ , ? 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。
?
在不同位置的不同的意义
?
左边是非量词元字符- 出现零到一次
?
左边是量词元字符- 取消捕获时候的贪婪性
?:
只匹配不捕获?=
正向预查?!
反向预查