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"]这样的结果呢?请写出代码?

三问,请三答,少一个回答都不给分。
请展开问题,要不然代码看不清
展开
 我来答
仙戈雅3n
2017-12-13 · TA获得超过5790个赞
知道大有可为答主
回答量:2398
采纳率:75%
帮助的人:894万
展开全部

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]);
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式