概念
贪婪和非贪婪(懒惰):
JavaScript中正则表达式默认是贪婪的,改成非贪婪(懒惰)的只需要把?加到*+?或者{}后面,将会使用两次变为非贪婪(懒惰)的。
很简单的理解就是,贪婪匹配就是尽可能多的匹配,非贪婪(懒惰)匹配就是尽可能少的匹配
在我们给一个限定符的时候,他会尽可能的去捕获到更多的内容,我们把这个叫做正则的贪婪性。
一、贪婪模式与非贪婪模式的内容
(1)贪婪模式:
正则表达式的普通量词,因为js中正则表达式默认使贪婪的。
- *
- +
- ?
- {n}
- {n,}
- {n,m}
(2)贪婪模式(懒惰模式):
- *?
- +?
- ??
- {n}?
- {n,}?
- {n,m}?
二、代码
(结果都在每行代码后面的注释里)
1.贪婪模式
(1)+ 表示你的字符串在捕获的时候会获取到最大的长度的数字
const reg1 = /\d+/;
console.log(reg1.exec('12345sgdfdfg678bdsdsuiudbkj')); //12345
(2) * 再捕获的时候会捕获到最大长度的数字
const reg3 = /\d*/;
console.log(reg3.exec('9889797khjkkhj6686')); //9889797
(3)? 表示在捕获的时候只能获取到第一个数字
const reg5 = /\d?/;
console.log(reg5.exec('12345abc')); //1
(4){3} 表示在捕获的时候只能获取前三位数字
const reg7 = /\d{3}/;
console.log(reg7.exec('aa111abc')); //111
(5){3,} 表示在捕获的时候只能获取前三位数字
const reg9 = /\d{3,}/;
console.log(reg9.exec('111abc')); //111
(6) {n,m} 在捕获的时候会捕获到最大长度,就是123456789
const reg11 = /\d{3,7}/;
console.log(reg11.exec('abcd123456789abc')); //123456789
2.非贪婪模式(懒惰模式)
(1)+? 在捕获的时候在按照最少的数量来捕获的数字
const reg2 = /\d+?/;
console.log(reg2.exec('bkjdsivdhodivnoi')); //null
(2)*? 再捕获的时候会按照最少的数量来捕获数字
const reg4 = /\d*?/;
console.log(reg4.exec('r5756576kjkjgvdsakhj967')); //'' 因为?表示0或1最少的就是0所以啥都没有捕获到
(3)?? 在捕获的时候会按照最少的数量来来捕获
const reg6 = /\d??/;
console.log(reg6.exec('12345678abc')); //''
(4){3}? 表示在铺货的时候只能获取前三位数字
const reg8 = /\d{3}?/;
console.log(reg8.exec('aa1221abc')); //222
(5){3,}? 表示在捕获的时候只能获取前三位数字
const reg10 = /\d{3,}?/;
console.log(reg10.exec('dsa1224543543abc')); //122
(6) {3,7} 在捕获的时候会捕获到最大长度,就是123456789
const reg12 = /\d{3,7}?/;
console.log(reg12.exec('abc123456789abc')); //123