Создание регулярного выражения из строки без кавычек - PullRequest
0 голосов
/ 28 января 2019

Мой код получит параметр, содержащий строковое представление регулярного выражения.Вероятно, что строки будут похожи на "/whatever/" с косой чертой в начале и в конце.Учитывая строку,

str = "/^foo.*bar$/"

Я хотел бы создать регулярное выражение из этой строки.

Когда я делаю:

pat = Regexp.new(str)
# => /\/^foo.*bar$\//
pat.match "foolishrebar"
# => nil

все специальные символыцитировал.Я не понял, как не процитировать строку.

Когда я создаю шаблон непосредственно с /pattern/, он отлично работает.

pat = /^foo.*bar$/
pat.match "foolishrebar"
# => #<MatchData "foolishrebar">

Ответы [ 2 ]

0 голосов
/ 28 января 2019
str = '^foo.*bar$'

r = /#{str}/
  #=> /^foo.*bar$/ 

"foolishly, the concrete guy didn't use rebar".match?(r)
  #=> true
0 голосов
/ 28 января 2019

Когда вы используете Regexp.new, не начинайте и не заканчивайте вашу строку с /.Просто позвольте str = '^foo.*bar$'.Единственное, что можно избежать - это начало и конец косой черты;метасимволы в порядке.

...