js正则表达式(.+)和(.+?) (.)和(.?)的区别
1.首先先分解正则的构成
“.”——** 匹配除换行符 \n 之外的任何单字符。
“+”—— 匹配前面的子表达式一次或者多次。(至少有一个匹配)
“”—— 匹配前面的子表达式零次或者多次。
“?*”—— 匹配前面的子表达式零次或者一次,或者指明一个非贪婪限定符。
2.(.+)和(.+?)的区别
(.+) 是贪婪匹配模式
(.+?)是惰性匹配模式
贪婪匹配模式是先从整个字符串中进行匹配,如果不匹配,则去掉字符串最后一个字符,再次进行匹配,直到符合匹配条件的字符串出现为止。
惰性匹配模式是字符串左侧第一个字符开始进行匹配,每次增加一个字符,直到匹配到符合条件的字符串为止。
“?”可以将贪婪匹配模式进行转换为惰性模式。当该字符紧跟在一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式就是惰性的。
3.例子
var str = 'aabab'
var str1 = str.match(/a(.*)b/);
var str2 = str.match(/a(.*?)b/);
console.log(str1)//['aabab','aba']
console.log(str2)//['aab','a']
注:上面的打印结果数组中的第一个元素是满足正则表达式的字符串,第二个元素是满足分组条件的字符串。()括号中的内容就是分组。
4. (.)和(.?)的区别
(.)和(.?) 和(.+)和(.+?) 同理,都是贪婪匹配与惰性匹配的区别。
拓展:虽然 **"." **可以匹配任何单字符,但是不能匹配到\n,也就是说不能匹配到换行,若果想真的做到全面匹配,可以使用 \s\S,其中\s表示匹配任何空白字符,包括空格、制表符、换页符。\S表示匹配任何非空白字符。