js 正则表达式进阶详解

1:贪婪匹配和非贪婪匹配

正则表达式中量词有
*0次或者多次)
?(0次或者1次)
+1次或者多次)
{m, n}(大于等于m小于等于n次)
{n}(n次)
这些量词会尽可能多的匹配,比如:
'abababa ababc abe'.match(/(ab)+/g),匹配结果是['ababab', 'abab', 'ab'],统称贪婪匹配
当这些量词后面再跟一个?,就变成了非贪婪匹配,会尽可能少的匹配,比如
'abababa ababc abe'.match(/(ab)+?/g),用的匹配结果是 ["ab", "ab", "ab", "ab", "ab", "ab"]

2:捕获分组和非捕获分组
正则表达式中的小括号表示分组,分组的内容可以通过一下方式获取

  • 字符串的replace方法,$n表示匹配到的第n个分组
    ‘2011-05-20 2012-05-20 2013-05-20’.replace(/(d{4})-(\d{2})-(\d{2})/g, ‘$3-$2-$1’)
    返回值为"20-05-2011 20-05-2012 20-05-2013"
    ‘2011-05-20 2012-05-20 2013-05-20’.replace(/(\d{4})-(\d{2})-(\d{2})/g, (…args) => {console.log(args)})
    在这里插入图片描述

  • 反向引用
    /(\d{3})\1\1/’.test(‘12312313’)

  • 非捕获分组:小括号中匹配到的内容不会放到匹配结果的分组中/(?:ab)+/g,这个正则表达式匹配的内容没有分组

3:正向肯定查找和正向否定查找

?= 正向肯定查找,x(?=y)匹配x当且仅当x后面紧跟着y
?! 正向否定查找,x(?!y)匹配x当且仅当x后面不紧跟着y
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值