正则表达式,包含中文词组且排除另一些词

3,724 阅读1分钟

记录一个小需求。

要求是,检测一句话中,是否包含A且排除B。其中A、B都是词组,且A为两组词的组合。

比如, A包含:【热呼呼、太阳】* 【天才、lovely】;B包含【不热呼呼、小太阳】

一句话为【热呼呼真是个天才啊】就命中了;【不热呼呼好天才】就不会命中。

包含A且排除B,实现方法为: ^(?!.*(B).*(A)

词组中包含多个词,实现方法为: ((热呼呼)|(太阳))

命中两个词组的组合,实现方法为: ((热呼呼)|(太阳))[\s\S]*((天才)|(lovely))

综合起来,最终实现需求的表达式,就是如下: ^(?!.*((不热呼呼)|(小太阳))).*((热呼呼)|(太阳))[\s\S]*((天才)|(lovely))

测试: 在线测就可以:c.runoob.com/front-end/8…

首先是句子里没有完全命中需要匹配的词组:

截屏2022-01-13 下午5.59.18.png

再测一下句子里包含了需要命中的词,但含有我们需要排除的词:

截屏2022-01-13 下午6.00.27.png

最后 ,句子里包含了需要命中的词,且没有命中排除词:

截屏2022-01-13 下午6.00.06.png

没有问题,完事儿~