js正则表达式(.+)和(.+?) (.)和(.?)的区别

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表示匹配任何非空白字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值