Ответ 1
Я делаю ruby regex'es следующим образом:
stringObj.match(/regex/)
Я работаю над механизмом кавычек в своем приложении, где должно быть просто ввести # 26, например, в форме комментария, чтобы процитировать комментарий 26 этой темы.
Чтобы проверить, хочет ли пользователь процитировать один или несколько комментариев, я устанавливаю условие if после моего current_user.comments.build и перед @comment.save.
Но, просто чтобы мой вопрос стал более общим и легче адаптироваться:
if @comment.content.include?(/\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i)
Я хочу что-то вроде этого. Этот пример предназначен для проверки того, содержит ли контент комментариев электронные письма. Но логически я получаю ошибку "не могу преобразовать регулярное выражение в строку".
Как вы можете включить include? метод в рельсах с регулярным выражением? Итак, чтобы проверить, содержит ли текст строку определенного формата регулярного выражения?
Или контроллер является неправильным местом для таких действий регулярного выражения?
Я делаю ruby regex'es следующим образом:
stringObj.match(/regex/)
Там также
if @comment.content =~ /regex/
Если у вас был массив всех предыдущих комментариев @prev_comments и вы хотели заменить их всего одним выстрелом, вы могли бы:
pattern = /#(\d+)/
@comment.content.gsub(pattern) do
cur_match = Regexp.last_match
idx = cur_match[1].to_i - 1
@prev_comments[idx]
end
Trick использует Regexp.last_match, чтобы получить текущее совпадение, что заставило меня задуматься, было ли это потокобезопасным. Он is, по-видимому.
адаптирован (украден) из ниже общего расширения строки
class String
def js_replace(pattern, &block)
gsub(pattern) do |_|
md = Regexp.last_match
args = [md.to_s, md.captures, md.begin(0), self].flatten
block.call(*args)
end
end
end
Источник: http://vemod.net/string-js_replace
Чтобы соответствовать характеру .include?
stringObj.match(/regex/).present?
Приведёт аналогичные истинные/ложные результаты, если вы используете Rails (или ActiveSupport)