js 正则表达式问题 贪婪与非贪婪
varstr='aaa';varreg=/(aa)+?/g;然后控制台执行:str.match(reg);结果得到如下输出:["aa"]请问:为什么只得到一个结果?为什么...
var str='aaa';
var reg=/(aa)+?/g;
然后控制台执行: str.match(reg);
结果得到如下输出:["aa"]
请问:
为什么只得到一个结果?
为什么没有输出["aa","aa"]这样的结果呢?
如何才能得到["aa","aa"]这样的结果呢?请写出代码?
三问,请三答,少一个回答都不给分。
请展开问题,要不然代码看不清 展开
var reg=/(aa)+?/g;
然后控制台执行: str.match(reg);
结果得到如下输出:["aa"]
请问:
为什么只得到一个结果?
为什么没有输出["aa","aa"]这样的结果呢?
如何才能得到["aa","aa"]这样的结果呢?请写出代码?
三问,请三答,少一个回答都不给分。
请展开问题,要不然代码看不清 展开
1个回答
展开全部
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]);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询