(JavaScript)贪婪模式和非贪婪模式(懒惰模式)

本文介绍了JavaScript中正则表达式的贪婪模式与非贪婪模式。贪婪模式默认尽可能多的匹配,而非贪婪模式则尽可能少的匹配。通过在量词后添加?,可以将模式切换为非贪婪。文中通过代码示例详细展示了各种量词在贪婪和非贪婪模式下的匹配行为,帮助读者理解这两种模式的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



概念

贪婪和非贪婪(懒惰):
        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

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值