简单聊一聊正则表达式中的贪婪匹配和非贪婪匹配
1. 贪婪匹配
在JS中利用正则表达式时,默认的匹配就是贪婪匹配,也就是尽可能多的去匹配,举个例子:
var s = 'aaa'; var regexp = /a+/; // 匹配1个或多个a,贪婪匹配 console.log(regexp.exec(s)[0]); // 'aaa'
在上面的例子中,匹配到了 ‘aaa‘
。
2. 非贪婪匹配
我们同样可以进行非贪婪匹配只需要在正则表达式待匹配的字符后面加上一个 ?
即可。
还是上面的例子:
var s = 'aaa'; var regexp = /a+?/; // 匹配1个或多个a,非贪婪匹配 console.log(regexp.exec(s)[0]); // 'a'
进行非贪婪匹配之后,可以看到只匹配到了 ‘a‘
。
3. 特殊的例子
请问下面的代码输出什么?
var s = 'aaab'; var regexp0 = /a+?b/; // 非贪婪匹配 var regexp1 = /a+b/; // 贪婪匹配 console.log(regexp0.exec(s)[0]); // 'aaab' console.log(regexp1.exec(s)[0]); // 'aaab'
进行非贪婪匹配时或许我们心中的答案是 ‘ab‘
,但是实际上匹配结果和贪婪匹配时一样为 ‘aaab‘
。
这是因为:正则表达式的模式匹配总是会寻找字符串中第一个可能匹配的位置。
在字符串 ‘aaab‘
中第一个 ‘a‘
就匹配上了,会接着往下匹配,直到匹配上 ‘b‘
。
完,如有不恰当之处,欢迎指正哦。
相关推荐
wangzhaotongalex 2020-10-20
wyq 2020-11-11
TLROJE 2020-10-26
风雨断肠人 2020-10-13
duanqingfeng 2020-09-29
rechanel 2020-11-16
cshanzhizi 2020-10-16
luofuIT成长记录 2020-09-22
phphub 2020-09-10
taomengxing 2020-09-07
MaggieRose 2020-08-19
flyingssky 2020-08-18
山水沐光 2020-08-18
jyj00 2020-08-15
AHuqihua 2020-08-09
山水沐光 2020-08-03