Rails Regexp::IGNORECASE 同时将精确选项与结果中包含的数字选项匹配
Rails Regexp::IGNORECASE while matching exact options with number options also included in the results
我想用精确的字符串匹配两个数组之间的选项。
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"
你需要使用
final_choice = options.grep(/\A(?:#{Regexp.union(choices).source})\z/i)
注:
- 正则表达式文字符号比构造函数符号更简洁
- 您仍然可以在正则表达式文字中使用变量
Regexp.union
方法使用 |
“或”正则表达式运算符连接 choices
中的备选方案,并根据需要自动[转义项目=37=]
\A
anchor 匹配stirng的开始,\z
匹配stirng的结束。
- 非捕获组
(?:...)
用于确保锚点分别应用于 choices
中的每个替代项。
.source
用于仅从正则表达式中获取 pattern 部分。
我想用精确的字符串匹配两个数组之间的选项。
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"
你需要使用
final_choice = options.grep(/\A(?:#{Regexp.union(choices).source})\z/i)
注:
- 正则表达式文字符号比构造函数符号更简洁
- 您仍然可以在正则表达式文字中使用变量
Regexp.union
方法使用|
“或”正则表达式运算符连接choices
中的备选方案,并根据需要自动[转义项目=37=]\A
anchor 匹配stirng的开始,\z
匹配stirng的结束。- 非捕获组
(?:...)
用于确保锚点分别应用于choices
中的每个替代项。 .source
用于仅从正则表达式中获取 pattern 部分。