非贪婪模式/(.*?).json/当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。那个这个怎么解释(.*?)
调试欢乐多
var s = '12345';
var re1 = /\d+/;
var re2 = /\d+?/;
alert( s.match(re1) )
alert( s.match(re2) )
贪婪 就是 尽可能多的匹配
非贪婪 就是 尽可能少的匹配
他会先找a,但bc.json不符合.json
于是他就找ab,但c.json也不符合.json
于是就找abc,此时.json符合.json(正则里的.是指任意字符,不光只".")符合要求
所以返回abc.json
但如果没那个问号的话就返回abc.json.json
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
}