非贪婪匹配

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

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

量词包括:

{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.csdn.net/yiifaa/article/details/76473282
         http://lullabyus.iteye.com/blog/1442347

posted @   全玉  阅读(299)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示