我需要创建一个JavaScript RegExp对象,如果被测试的字符串不包含'foo'且不包含'bar'且不包含'baz',则返回true .
这是一般的想法......我有一个很大的结果集 . 我需要做一系列使用一系列RegExp.test()过滤和flatMap的函数链 .
结果将是:
-
包含'foo'的所有字符串的一个子集 .
-
包含'bar'的所有字符串的一个子集 .
-
包含'baz'的所有字符串的一个子集 .
-
一个带有 everything else 的子集(即那些先前的RegExp测试失败 each 的子集 . )
我有1-3完美的工作 . 它找到了一个很好的方法来做#4,我遇到了麻烦 . 我试过做一个谓词返回的过滤器
(false === fooRegex.test(result) && false === barRegext.text && false == bazRegex.test)
这不仅麻烦,而且还有几个误报 .
我想做的是类似下面的伪代码:
var myRegex = new RegExp('!foo && !bar && !baz', 'gi')
提前致谢!!!
3 回答
使用De Morgan's laws . 否定的结合是对分离的否定 .
这应该这样做:
它将测试您要查找的每个项目,如果没有找到,则添加到将在元素“out”中显示的列表 .
感谢所有给予帮助的人!
我在评论中使用了 Wiktor Stribiżew 发布的解决方案:
JavaScript RegExp for NOT foo AND NOT bar AND NOT baz:
我实现了这样:
现在我只是在传递给.filter()的谓词函数中使用
catchAllRegExp.test(result)
.UPDATE:
我正在使用babel / webpack在ES6中工作 . 但是,在ES5中,上述语法会引发以下错误:
在正则表达式框架之后直接放置标志解决了这个问题:
但是,我认为使用速记更好:
再次感谢!