正则表达式的先行断言、后行断言

实际开发中经常会遇到这样的情况,需要在一组字符串中取出指定的字符,例如:

取出如下一段代码里和html标签

<div><h2>title</h2><p>content</p></div>

理想的结果是:['div', 'h2', 'p']

经观察目前字符串的特点是:前置有:<、后置有:>,这个时候就能用到先行断言和后行断言,直接给出代码:

'<div><h2>title</h2><p>content</p></div>'.match(/(?<=\<)[a-z0-9]+(?=\>)/g)

由于 后行断言 ES2018 才引入,所以实际应用中可能会需到问题,这个另外的话题,暂不提。


下面用另一个例子,再系统说一下先行断言和后行断言

有如下字符串:

我爱你 我爱 爱 爱你

如果要取出字,要求这个爱字后面有,这个时候就要这么写,这就是 先行断言

'我你 我爱 爱 你'.match(/爱(?=你)/g) // ["爱", "爱"]

如果要求字后面没有,那自然也有先行否定断言

'我爱你 我 爱你'.match(/爱(?!你)/g) // ["爱", "爱"] ,因为匹配相同...

这个时候,如果要求字后面有,前面还要有,那就要用到后行断言了,如下:

'我你 我爱 爱 爱你'.match(/(?<=我)爱(?=你)/g) // ["爱"]

最后,如果要求爱字前面没有我,后面也没有我,那就要用到先行否定断言后行否定断言,如下:

'我爱你 我爱 爱你'.match(/(?<!我)爱(?!你)/g) // ["爱"]

后最要说,正则表达式真是太灵活了... 加一个 软老师传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值