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
中的替代项,并根据需要自动转义
\A
anchor 匹配stirng 的开头,\z
匹配stirng 的结尾。
非捕获组(?:...)
用于确保将锚分别应用于choices
中的每个备选方案。
.source
仅用于从正则表达式中获取 pattern 部分。
【讨论】:
以上是关于Rails Regexp::IGNORECASE 同时将精确选项与数字选项匹配也包含在结果中的主要内容,如果未能解决你的问题,请参考以下文章
markdown [rails:devise] Ruby on Rails的身份验证gem。 #ruby #rails