zoukankan      html  css  js  c++  java
  • 非贪婪匹配

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

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

    量词包括:

    {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

  • 相关阅读:
    光照模型
    多线程编程(7)Semaphore信号量
    多线程编程(3)
    Oracle SQL*plus常用的命令和函数
    经典的开发工具
    Windows 7/Vista下通过组策略禁止USB接口
    浅谈.NET下的多线程
    SQLServer和Oracle常用函数对比
    注册表操作类
    利用using和try/finally语句来清理资源
  • 原文地址:https://www.cnblogs.com/mengff/p/9675290.html
Copyright © 2011-2022 走看看