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'

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

  • 相关阅读:
    Python制作天气查询软件【python实战必学】
    Python妹子图爬虫实战项目【新手必学】
    Python超级无敌技巧分享
    PlaySound使用进阶
    【】2019
    【】风之忧伤
    delete[]和delete
    《windows程序设计 第五版》实例
    playsound函数用法
    【Python入门自学笔记专辑】——Python跳转语句和循环使用范围
  • 原文地址:https://www.cnblogs.com/zhangguicheng/p/12098538.html
Copyright © 2011-2022 走看看