反转正则表达式的 Rubyish 方式

标签 ruby regex

假设正则表达式来自当前上下文之外的调用代码,然后传递给当前项目之外实现的另一个调用:

["1", "2"].grep(/1/)        #=> ["1"]

是否有一种简单的 Rubyish 方式可以在调用时实现以下行为?

["1", "2"].grep(/1/.negate) #=> ["2"]

此行为类似于将 =~ 运算符切换为 !~ 运算符。当然,可以使用#select#reject,也可以打开或子类化Regexp。但我很好奇 Ruby 中是否已经有一种方法可以否定正则表达式以上述方式返回的匹配项。此外,我不关心是否 falseniltrue 或匹配的位置参与实现此效果。

有一个theoretical question这是相关的,但超出了此处的简单考虑范围。


编辑:我知道迭代器是在 Ruby 中过滤列表的一般方法,但人们忽略了问题的限制。另外,我认为正则表达式的倒置方式有一些很好的功能。我不认为它是过度劳累或过于聪明的一半;它是普通的面向对象编程,也是 Ruby 擅长做的事情。

最佳答案

["1", "2"].reject { |e| /1/ === e }

关于反转正则表达式的 Rubyish 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17659593/

相关文章:

ruby - Mechanize 可以与浏览器一起使用吗?

ruby-on-rails - 如何在 ruby 中限制和舍入数字

ruby-on-rails - Ruby 从数组中选择,其中键类似于参数

javascript - 可以在 Javascript onclick 事件(HTML)中使用正则表达式吗?

regex - grep 正则表达式没有正确匹配零

ruby - 读取urls.txt

ruby-on-rails - 通过 Git 更新/部署 Rails 应用程序的最佳工作流程是什么?

python - 如何删除Python中与正则表达式匹配的所有字符串?

java正则表达式将ip地址和端口号匹配为捕获组

java - 如何使用java验证字符串