Rails - Как вставить переменную в регулярное выражение (Regex), например, assert_match - PullRequest
20 голосов
/ 17 декабря 2009

Я хочу сделать что-то вроде

assert_match /blah blah blah #{@user}/, @some_text

но мне не повезло с этим.

Что я здесь не так делаю?

Ответы [ 4 ]

30 голосов
/ 17 декабря 2009

Это правильный способ вставить переменную в регулярное выражение:

irb(main):001:0> a='Hi'
=> "Hi"
irb(main):002:0> b=/Not #{a}/
=> /Not Hi/

Так что ваша проблема, скорее всего, в том, что утверждение не выполнено из-за плохого совпадения. Проверьте значения @user и @some_text и попробуйте http://rubular.com, чтобы найти соответствующее регулярное выражение

10 голосов
/ 17 декабря 2009

Если есть возможность строки @user, содержащей специальные символы регулярного выражения, вы должны изменить это на:

/blah blah blah #{Regexp.escape(@user)}/
3 голосов
/ 18 декабря 2009

вы можете взглянуть на% r {}, например:

pattern = 'foo'
%r{#{pattern}_bar} =~ 'foo_bar_2000'

1 голос
/ 17 декабря 2009

assert_match также принимает строку, например

assert_match("blah blah", 'a string')

так что другой способ сделать то, что вы делаете, - это пользовательская интерполяция строк

string_to_match = "blah blah #{@user}"

assert_match(string_to_match, 'a string')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...