Регулярное выражение не работает, когда помещается в объект - PullRequest
1 голос
/ 27 августа 2010

Я пытаюсь сохранить регулярные выражения в базе данных, но они не работают, когда используются в .sub (), даже если тот же regex работает, когда используется непосредственно в .sub () как строка.

regex = Class.object.field  // Class.object is an active record containing "\w*\s\/\s"
mystring = "first / second"

mystring.sub(/#{regex}/, '')
// => nil

mystring.sub(/\w*\s\/\s/, '') 
// => second

Любое понимание приветствуется!

Спасибо, Мэтт.

Редактирование для исправления терминологии класса / объекта (спасибо) и исправление второго примера, как я показал # {}, обернутого вокруграбочее регулярное выражение (вырезать и вставить SNAFU).

Ответы [ 3 ]

1 голос
/ 27 августа 2010

Чтобы ответить на ваш вопрос: это не совсем то, чем является ваша Class.object. Если это ActiveRecord, он не будет работать.

Редактировать: Вы, очевидно, обнаружили, что проблема заключается в том, что Rails избегает регулярного выражения .

ActiveRecord не может "содержать" ваше регулярное выражение напрямую; регулярное выражение будет в одном из полей вашей записи. В этом случае вы захотите сделать что-то вроде regexp = Class.object.field_containing_the_regexp.

Даже если это не так, я подозреваю, что проблема в том, что ваш regexp является чем-то отличным от строки. Вы можете быстро проверить это, используя

puts "My regexp: #{regexp}"

Строка, которую вы увидите в выводе, будет той, которая используется для регулярного выражения.

0 голосов
/ 28 августа 2010

Оказывается, мое регулярное выражение не учитывает все случаи - \ w не учитывает символы. После того, как я проверил консоль рельсов и увидел, что убежавший сбежал, я был уже на полпути по неправильному пути.

Спасибо за помощь.

0 голосов
/ 27 августа 2010

Строка не является регулярным выражением. Сначала вы должны создать объект Regexp.

regex = Regexp.new("\w*\s\/\s")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...