• 简单聊一聊正则表达式中的贪婪匹配和非贪婪匹配


    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'

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

  • 相关阅读:
    java 反射
    java 泛型实现原理
    java 常量池
    java String的intern()方法
    HashMap和Hashtable的区别
    Java反射
    初始JSP
    JSP动态网页
    关于学习Vue的前置工作/技术储备
    Java 高级开发必修知识---反射
  • 原文地址:https://www.cnblogs.com/zhangguicheng/p/12098538.html
Copyright © 2020-2023  润新知