如何将Ruby变量放入正则表达式代码中

8
我正在使用grep方法通过模式匹配进行过滤。下面是示例代码。
companies.grep /city/

然而,在 Rails 视图中的块内,Ruby 不允许我输入 area_code。相反,我被迫像这样硬编码:

companies.grep /miami/

记住,city是一个变量。例如,
city = miami

然而,它进行了更新。你知道如何通过grep方法传递一个变量吗?

我还尝试过companies.grep /#{city}/,但它没有起作用。

1个回答

23
companies.grep /#{city}/
# or
companies.grep Regexp.new(city)

如果是简单的字母数字查询,这个就够了;但最好养成转义它们的习惯,如果你不打算使用正则表达式操作符的话。因此,更好的版本:

companies.grep /#{Regexp.escape city}/
# or
companies.grep Regexp.new(Regexp.escape city)

这两个是等价的。如果 city 相同,那么 /#{city}/ 不可能失败,而 Regexp.new(city) 成功的几率为零(除非有人重新定义了 Regexp 来捣乱)。 - Amadan
然而,在 Rails 视图中,当 Regexp.new(city) 成功时,它确实发生了。 - user3465296

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接