假设正则表达式来自当前上下文之外的调用代码,然后传递给当前项目之外实现的另一个调用:
["1", "2"].grep(/1/) #=> ["1"]
是否有一种简单的 Rubyish 方式可以在调用时实现以下行为?
["1", "2"].grep(/1/.negate) #=> ["2"]
此行为类似于将 =~
运算符切换为 !~
运算符。当然,可以使用#select
或#reject
,也可以打开或子类化Regexp
。但我很好奇 Ruby 中是否已经有一种方法可以否定正则表达式以上述方式返回的匹配项。此外,我不关心是否 false
或 nil
或 true
或匹配的位置参与实现此效果。
有一个theoretical question这是相关的,但超出了此处的简单考虑范围。
编辑:我知道迭代器是在 Ruby 中过滤列表的一般方法,但人们忽略了问题的限制。另外,我认为正则表达式的倒置方式有一些很好的功能。我不认为它是过度劳累或过于聪明的一半;它是普通的面向对象编程,也是 Ruby 擅长做的事情。
最佳答案
["1", "2"].reject { |e| /1/ === e }
关于反转正则表达式的 Rubyish 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17659593/