我需要逻辑和在正则表达式。
类似的
杰克和詹姆斯
同意以下字符串
'嗨,杰克,我是詹姆斯' '嗨,詹姆斯,我是杰克'
我需要逻辑和在正则表达式。
类似的
杰克和詹姆斯
同意以下字符串
'嗨,杰克,我是詹姆斯' '嗨,詹姆斯,我是杰克'
当前回答
Try:
james.*jack
如果你同时想要两者,那么:
james.*jack|jack.*james
其他回答
你可以使用regex的量词特性,因为不一定总是支持查找。
(\bjames\b){1,}.*(\bjack\b){1,}|(\bjack\b){1,}.*(\bjames\b){1,}
我要写的命令说明:-
. 表示任何字符、数字都可以代替。
*表示零次或多次在它前面写的东西。
|表示“或”。
So,
james.*jack
会搜索詹姆斯,然后任意数量的角色,直到杰克出现。
既然你想要任何一个杰克。詹姆斯还是詹姆斯,杰克
于是命令:
jack.*james|james.*jack
不需要两个lookhead,一个子字符串可以正常匹配。
^(?=.*?\bjack\b).*?\bjames\b.*
在regex101上查看这个演示
查找是零长度断言(条件)。这里的forward在^ start处检查是否jack出现在字符串的后面,如果成功则匹配到james和.*其余部分(可以删除)。Lazy dot用于单词之前(包含在\b单词边界中)。使用i标志来忽略大小写。
它又短又甜
(?=.*jack)(?=.*james)
测试用例:
[ “xxx James xxx jack xxx”, “jack XXX James”, “jack XXX jam”, “果酱和杰克”, “杰克”, “詹姆斯”, ] .forEach (s = > console.log(/(? =。*詹姆斯)(? =。*杰克)/ test (s)))
Try:
james.*jack
如果你同时想要两者,那么:
james.*jack|jack.*james