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

  • 相关阅读:
    selenium 浏览器标签切换
    selenium 执行js代码
    selenium 图片懒加载
    selenium 浏览器最大化
    selenium-无窗口模式
    selenium 提取天猫网页数据
    selenium--数据填充
    selenium---输入内容后搜索
    bittorrent 学习(四) tracker peer通讯
    sha1 算法源码
  • 原文地址:https://www.cnblogs.com/mengff/p/9675290.html
Copyright © 2011-2022 走看看