记录一个小需求。
要求是,检测一句话中,是否包含A且排除B。其中A、B都是词组,且A为两组词的组合。
比如, A包含:【热呼呼、太阳】* 【天才、lovely】;B包含【不热呼呼、小太阳】
一句话为【热呼呼真是个天才啊】就命中了;【不热呼呼好天才】就不会命中。
包含A且排除B,实现方法为:
^(?!.*(B).*(A)
词组中包含多个词,实现方法为:
((热呼呼)|(太阳))
命中两个词组的组合,实现方法为:
((热呼呼)|(太阳))[\s\S]*((天才)|(lovely))
综合起来,最终实现需求的表达式,就是如下:
^(?!.*((不热呼呼)|(小太阳))).*((热呼呼)|(太阳))[\s\S]*((天才)|(lovely))
测试: 在线测就可以:c.runoob.com/front-end/8…
首先是句子里没有完全命中需要匹配的词组:
再测一下句子里包含了需要命中的词,但含有我们需要排除的词:
最后 ,句子里包含了需要命中的词,且没有命中排除词:
没有问题,完事儿~