以上的三个量词符,默认情况下都是最大可能匹配,即匹配直到下一个字符不满足匹配规则为止。这被称为贪婪模式。
~~~
var s = 'aaa';
s.match(/a+/) // ["aaa"]
~~~
上面代码中,模式是`/a+/`,表示匹配1个`a`或多个`a`,那么到底会匹配几个`a`呢?因为默认是贪婪模式,会一直匹配到字符`a`不出现为止,所以匹配结果是3个`a`。
如果想将贪婪模式改为非贪婪模式,可以在量词符后面加一个问号。
~~~
var s = 'aaa';
s.match(/a+?/) // ["a"]
~~~
上面代码中,模式结尾添加了一个问号`/a+?/`,这时就改为非贪婪模式,一旦条件满足,就不再往下匹配。
除了非贪婪模式的加号,还有非贪婪模式的星号(`*`)和非贪婪模式的问号(`?`)。
* `+?`:表示某个模式出现1次或多次,匹配时采用非贪婪模式。
* `*?`:表示某个模式出现0次或多次,匹配时采用非贪婪模式。
* `??`:表格某个模式出现0次或1次,匹配时采用非贪婪模式。
~~~
'abb'.match(/ab*b/) // ["abb"]
'abb'.match(/ab*?b/) // ["ab"]
'abb'.match(/ab?b/) // ["abb"]
'abb'.match(/ab??b/) // ["ab"]
~~~
- 第一章:变量与作用域
- 第一节:变量
- 第二节:执行环境及作用域
- 第三节:JS 解析机制
- 第四节:垃圾收集
- 第二章:深入函数
- 第一节:概述
- 第二节:函数声明
- 第三节:函数调用
- 第四节:函数参数
- 第五节:函数返回值
- 第三章:面向对象
- 第一节:概述
- 第二节:对象声明
- 第三节:this 关键字
- 第四节:对象遍历
- 第五节:对象继承
- 第六节:模块
- 第四章:正则表达式
- 第一节:概述
- 第二节:实例属性
- 第三节:实例方法
- 第一课时:测试
- 第二课时:执行
- 第四节:匹配规则
- 第一课时:字面量字符和元字符
- 第二课时:转义符
- 第三课时:特殊字符
- 第四课时:字符类
- 第五课时:预定义模式
- 第六课时:重复类
- 第七课时:量词符
- 第八课时:贪婪模式
- 第九课时:修饰符
- 第十课时:组匹配
- 第五节:字符串的实例方法
- 第一课时:匹配
- 第二课时:搜索
- 第三课时:替换
- 第四课时:分割