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'

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

  • 相关阅读:
    HDU 2852 KiKi's K-Number (主席树)
    HDU 2089 不要62
    Light oj 1140 How Many Zeroes?
    Bless You Autocorrect!
    HDU 6201 transaction transaction transaction
    HDU1561 The more ,The better (树形背包Dp)
    CodeForces 607B zuma
    POJ 1651 Mulitiplication Puzzle
    CSUOJ 1952 合并石子
    Uva 1599 Ideal path
  • 原文地址:https://www.cnblogs.com/zhangguicheng/p/12098538.html
Copyright © 2011-2022 走看看