zoukankan      html  css  js  c++  java
  • 简单聊一聊正则表达式中的贪婪匹配和非贪婪匹配

    1. 贪婪匹配

    在JS中利用正则表达式时,默认的匹配就是贪婪匹配,也就是尽可能多的去匹配,举个例子:

    var s = 'aaa';
    var regexp = /a+/; // 匹配1个或多个a,贪婪匹配
    console.log(regexp.exec(s)[0]); // 'aaa'
    

    在上面的例子中,匹配到了 'aaa'

    2. 非贪婪匹配

    我们同样可以进行非贪婪匹配只需要在正则表达式待匹配的字符后面加上一个 ? 即可。

    还是上面的例子:

    var s = 'aaa';
    var regexp = /a+?/; // 匹配1个或多个a,非贪婪匹配
    console.log(regexp.exec(s)[0]); // 'a'
    

    进行非贪婪匹配之后,可以看到只匹配到了 'a'

    3. 特殊的例子

    请问下面的代码输出什么?

    var s = 'aaab';
    var regexp0 = /a+?b/; // 非贪婪匹配
    var regexp1 = /a+b/; // 贪婪匹配
    console.log(regexp0.exec(s)[0]); // 'aaab'
    console.log(regexp1.exec(s)[0]); // 'aaab'
    

    进行非贪婪匹配时或许我们心中的答案是 'ab' ,但是实际上匹配结果和贪婪匹配时一样为 'aaab'

    这是因为:正则表达式的模式匹配总是会寻找字符串中第一个可能匹配的位置。

    在字符串 'aaab' 中第一个 'a' 就匹配上了,会接着往下匹配,直到匹配上 'b'

    完,如有不恰当之处,欢迎指正哦。

  • 相关阅读:
    linux定时器
    TIMESTAMP和DATETIME的区别
    Linux进程或线程绑定到CPU
    C++学习笔记
    磁盘扇区校验和
    docker安装mysql,并配置部分表同步
    docker 安装tomcat
    多tomcat 同一个浏览器 多个项目 会导致session覆盖
    Ubuntu 安装 NodeJS
    Ubuntu 下安装 Arduino IDE
  • 原文地址:https://www.cnblogs.com/zhangguicheng/p/12098538.html
Copyright © 2011-2022 走看看