Rails - как вы вставляете переменную в регулярное выражение (Regex), например, assert_match

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

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

но мне не повезло, что он работает.

Что я здесь делаю неправильно?

4 ответа

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

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

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


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

/blah blah blah #{Regexp.escape(@user)}/


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

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


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

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

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

string_to_match = "blah blah #{@user}"
assert_match(string_to_match, 'a string')

licensed under cc by-sa 3.0 with attribution.