JavaScript正则表达式贪婪模式与惰性模式
元字符/元符号 | 匹配规则 | 例子 | 结果 |
---|
? | 匹配出现0次或1次 | /a?/.test('abcd'); | true |
+ | 匹配出现1次或多次 | /a+/.test('aaaaaaaa'); | true |
* | 匹配出现0次或1次或多次 | /a*/.test('bbbbb'); | true |
{n} | 匹配刚好出现n次 | /a{5}/.test('aaaab'); | false |
{n,m} | 匹配最少出现n次最多出现m次 | /a{1,3}/.test('aaabbb'); | true |
{n,} | 匹配最少出现n次 | /a{3,}/.test('aabbb'); | false |
贪婪模式:匹配尽可能多的字符
首先比对整个字符串是否匹配,如果匹配不成功则去掉字符串最后一个字符再继续进行匹配,以此类推直到匹配成功或不剩字符才停止。
var str = '0a123ba123ba123';
var pattern = /a[a-b0-9]*b/;
pattern.test(str);
//工作过程如下:
pattern.test('0a123ba123ba123'); //false 首先比对整个字符串,如果不匹配,删除最后一个字符3继续匹配
pattern.test('0a123ba123ba12'); //false 如果不匹配,删除最后一个字符2再继续匹配
...
pattern.test('0a123ba123b'); //true 匹配成功,停止工作
惰性模式:匹配尽可能少的字符
惰性量词 | ?? | +? | *? | {n}? | {n,m}? | {n,}? |
---|
首先从字符串第一个字符开始匹配,如果匹配成功则停止匹配,否则加入第二个字符继续匹配,依此类推直到匹配成功或不剩字符才停止。
var str = '0a123ba123ba123';
var pattern = /a[a-b0-9]*?b/;
pattern.test(str);
//工作过程如下:
pattern.test('0'); //false 首先比对第一个字符,如果不匹配,加入第二个字符a继续匹配
pattern.test('0a'); //false 如果不匹配,加入第三个字符1再继续匹配
...
pattern.test('0a123b'); //true 匹配成功,停止工作
模式比对:
模式 | 表达式 | 例子 | 结果 |
---|
贪婪 | /a[a-b0-9]*b/ | '0a123ba123b'.match(/a[a-b0-9]*b/); | ["a123ba123b"] |
惰性 | /a[a-b0-9]*?b/ | '0a123ba123b'.match(/a[a-b0-9]*?b/); | ["a123b"] |