js 正则表达式问题 贪婪与非贪婪
答案:1 悬赏:60 手机版
解决时间 2021-03-19 21:50
- 提问者网友:像風在裏
- 2021-03-19 15:52
js 正则表达式问题 贪婪与非贪婪
最佳答案
- 五星知识达人网友:不如潦草
- 2021-03-19 17:00
1)为什么只得到一个结果?
因为模式/(aa)+?/g可以匹配aa,aaa,aaaa...,因为输入串只有3个a,而正则表达式引擎的搜索模式是由左往右搜索,若匹配到一次后,下次将紧接上一次成功匹配后的下一个位置起,因为上一次成功的位置第2个a,所以第二次匹配时,将从第3个a开始,由于只有一个a,所以不满足子表达(aa)。所以只得到一个结果。
2)为什么没有输出["aa","aa"]这样的结果呢?
原因:见上。
3)如何才能得到["aa","aa"]这样的结果呢?请写出代码?
如上分析,可以再加一个a。即
var str = 'aaaa';
var reg = /(aa)+?/g;
var results = str.match(reg);
for (var x in results) alert('index='+x+',value='+results[x]);如果想体现贪婪与非贪婪效果,可以这样做:
// 贪婪模式
var str = 'aaaa';
var reg = /a+/g;
var results = str.match(reg);
// 返回1个搜索结果,结果为所有的a
for (var x in results) alert('index='+x+',value='+results[x]); // 非贪婪模式
var str = 'aaaa';
var reg = /a+?/g;
var results = str.match(reg);
// 返回4个搜索结果,每个结果均为a
for (var x in results) alert('index='+x+',value='+results[x]);
因为模式/(aa)+?/g可以匹配aa,aaa,aaaa...,因为输入串只有3个a,而正则表达式引擎的搜索模式是由左往右搜索,若匹配到一次后,下次将紧接上一次成功匹配后的下一个位置起,因为上一次成功的位置第2个a,所以第二次匹配时,将从第3个a开始,由于只有一个a,所以不满足子表达(aa)。所以只得到一个结果。
2)为什么没有输出["aa","aa"]这样的结果呢?
原因:见上。
3)如何才能得到["aa","aa"]这样的结果呢?请写出代码?
如上分析,可以再加一个a。即
var str = 'aaaa';
var reg = /(aa)+?/g;
var results = str.match(reg);
for (var x in results) alert('index='+x+',value='+results[x]);如果想体现贪婪与非贪婪效果,可以这样做:
// 贪婪模式
var str = 'aaaa';
var reg = /a+/g;
var results = str.match(reg);
// 返回1个搜索结果,结果为所有的a
for (var x in results) alert('index='+x+',value='+results[x]); // 非贪婪模式
var str = 'aaaa';
var reg = /a+?/g;
var results = str.match(reg);
// 返回4个搜索结果,每个结果均为a
for (var x in results) alert('index='+x+',value='+results[x]);
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯