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

  • 相关阅读:
    软件工程概论之web基础
    java动手动脑——异常处理
    Java动手动脑——多态和继承
    java字串
    数据结构——用栈来判断回文字符串
    java一个能记录生成多少个对象的类
    openwrt设置默认登陆密码
    在ubuntu中安装luci解决iwinfo.h No such file or directory问题
    添加mysamba
    更改默认打开wifi功能
  • 原文地址:https://www.cnblogs.com/mengff/p/9675290.html
Copyright © 2011-2022 走看看