Rails Regexp::IGNORECASE 同时将精确选项与数字选项匹配也包含在结果中

Posted

技术标签:

【中文标题】Rails Regexp::IGNORECASE 同时将精确选项与数字选项匹配也包含在结果中【英文标题】:Rails Regexp::IGNORECASE while matching exact options with number options also included in the results 【发布时间】:2021-11-28 07:50:58 【问题描述】:

我想用精确的字符串匹配两个数组之间的选项。

options = ["arish1", "arish2", "ARISH3", "arish 2", "arish"]
choices = ["Arish"]
final_choice = options.grep(Regexp.new(choices.join('|'), Regexp::IGNORECASE))
p final_choice

Output:
 ["arish1", "arish2", "ARISH3", "arish 2", "arish"]

but it should be only match "arish"

【问题讨论】:

【参考方案1】:

你需要使用

final_choice = options.grep(/\A(?:#Regexp.union(choices).source)\z/i)

请参阅Ruby online demo。

注意:

正则表达式文字符号比构造函数符号更整洁 您仍然可以在正则表达式文字中使用变量 Regexp.union 方法使用|“或”正则表达式运算符加入choices 中的替代项,并根据需要自动转义 \Aanchor 匹配stirng 的开头,\z 匹配stirng 的结尾。 非捕获组(?:...) 用于确保将锚分别应用于choices 中的每个备选方案。 .source 仅用于从正则表达式中获取 pattern 部分。

【讨论】:

以上是关于Rails Regexp::IGNORECASE 同时将精确选项与数字选项匹配也包含在结果中的主要内容,如果未能解决你的问题,请参考以下文章

Rails:rails 模型的默认排序顺序?

markdown [rails:devise] Ruby on Rails的身份验证gem。 #ruby #rails

Rails:如何在 Rails 中为 Devise 设置密钥?

从 Rails 2 到 Rails 3 路由

Rails:在 Rails 控制器中捕获所有异常

如何在带有 Rails 4.2 的专用调试端口上使用工头启动 Rails?