非贪婪匹配

正则表达式的量词有贪婪匹配和非贪婪匹配之分。

贪婪匹配: 匹配成功前提下,尽可能多的匹配
非贪婪匹配: 匹配成功前提下,尽可能少的匹配

量词包括:

{m, n}
{m, }
?
*
+

以上默认分为贪婪模式,若要改为非贪婪模式,只在量词后面加个?就行了:

{m, n}?
{m, }?
??
*?
+?

1. 举例

// 即为字符串高亮为红色  
function hightlight(str){  
    return "<font color=red>"+str+"</font>";  
}  

//使用贪婪模式
var reg = new RegExp('(a+)');  
var str = 'aaa';  
var newstr = str.replace(reg, hightlight);  
document.write(newstr + "<br/>");   

输出:aaa

//非贪婪模式
var reg = new RegExp('(a+?)'); 
var str = 'aaa';  
var newstr = str.replace(reg, hightlight);  
document.write(newstr + "<br/>");   

输出:aaa

//非贪婪模式,正则是从左到右匹配,直到匹配为止,所以此处会匹配aaab,而不是ab或b
var reg = new RegExp('(a*?b)');  
var str = 'aaab';  
var newstr = str.replace(reg, hightlight);  
document.write(newstr);   

输出: aaab

2. 应用

var str = "[DTools]              [logs]                [Program Files]"

要匹配上面字符串中的[]中的单词

//贪婪匹配
"\\[([^\\]]+)\\]"

//非贪婪匹配
"\\[(.+?)\\]"

非贪婪匹配会用最小边界匹配,不用考虑中间字符的排除问题,写起来更简洁。

 

参考:https://blog.youkuaiyun.com/yiifaa/article/details/76473282
         http://lullabyus.iteye.com/blog/1442347

转载于:https://www.cnblogs.com/mengff/p/9675290.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值