Rails - как вы вставляете переменную в регулярное выражение (Regex), например, assert_match
Я хочу сделать что-то вроде
assert_match /blah blah blah #{@user}/, @some_text
но мне не повезло, что он работает.
Что я здесь делаю неправильно?
Ответы
Ответ 1
Это правильный способ вставить переменную в регулярное выражение:
irb(main):001:0> a='Hi'
=> "Hi"
irb(main):002:0> b=/Not #{a}/
=> /Not Hi/
Итак, ваша проблема в том, что утверждение терпит неудачу из-за плохого совпадения. Проверьте значение @user и @some_text и попробуйте http://rubular.com, чтобы создать соответствующее регулярное выражение
Ответ 2
Если существует какая-либо возможность строки @user, содержащая специальные символы регулярного выражения, вы должны изменить это на:
/blah blah blah #{Regexp.escape(@user)}/
Ответ 3
вы можете взглянуть на% r {}, например:
pattern = 'foo'
%r{#{pattern}_bar} =~ 'foo_bar_2000'
Ответ 4
assert_match также принимает строку, например
assert_match("blah blah", 'a string')
так что другим способом делать то, что вы делаете, будет интерполяция пользовательских строк
string_to_match = "blah blah #{@user}"
assert_match(string_to_match, 'a string')