非贪婪模式/(.*?).json/当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。那个这个怎么解释(.*?)

解决方案 »

  1.   


    var s = '12345';
    var re1 = /\d+/;
    var re2 = /\d+?/;
    alert( s.match(re1) )
    alert( s.match(re2) )
    贪婪 就是 尽可能多的匹配
    非贪婪  就是 尽可能少的匹配
      

  2.   

    比如说是abc.json.json
    他会先找a,但bc.json不符合.json
    于是他就找ab,但c.json也不符合.json
    于是就找abc,此时.json符合.json(正则里的.是指任意字符,不光只".")符合要求
    所以返回abc.json
    但如果没那个问号的话就返回abc.json.json
      

  3.   


    System.out.println("abc.json.json".matches("(.*?).json"));//true
    Pattern p = Pattern.compile("(.*?).json");
    Matcher m = p.matcher("abc.json.json");
    if(m.find()){
    System.out.print(m.group());//abc.json
    }