Рубиновое регулярное выражение для звездочек / подчеркивание к сильному / em? - PullRequest
1 голос
/ 14 января 2012

Как часть приложения чата, которое я пишу, мне нужно использовать регулярные выражения для сопоставления звездочек и подчеркиваний в сообщениях чата и превращения их в теги <strong> и <em>. Так как я ужасно с регулярным выражением, я действительно застрял здесь. В идеале мы бы настроили его так, чтобы:

  • Для сильных / em можно пометить от одного до трех слов, но не более.
  • Шаблоны типа "un * believ * able" будут сопоставлены.
  • Только одна или другая (сильная ИЛИ em) работают в одной строке.

Вышеуказанные параметры в порядке важности, только 1 крайне необходим - остальные просто красивы. Самое близкое, что я нашел, было:

text = text.sub(/\*([(0-9a-zA-Z).*])\*/,'<b>\1<\/b>')
text = text.sub(/_([(0-9a-zA-Z).*])_/,'<i>\1<\/i>')

Но, очевидно, он не работает ни с одним из наших параметров.

Странно, что уже нет примера чего-то подобного, учитывая популярность использования звездочек для жирного шрифта и еще много чего. Если есть, я не смог бы найти его за пределами плагинов / гемов (что не сработает для этого экземпляра, так как он мне действительно нужен только в одном месте в моей модели). Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 14 января 2012

Это должно помочь вам закончить то, что вы делаете:

sub(/\*(.*)\*/,'<b>\1</b>')
sub(/_(.*)_/,'<i>\1</i>')
0 голосов
/ 14 января 2012

Во-первых, ваши критерии немного странные, но, ладно ...

Похоже, что возможным алгоритмом для этого было бы найти количество совпадений в сообщении, сосчитать их, чтобы увидеть, если их меньше 4, а затем попытаться выполнить один набор замен.

strong_regexp = /\*([^\*]*)\*/
em_regexp = /_([^_]*)_/

def process(input)
  if input ~= strong_regexp && input.match(strong_regexp).size < 4
    input.sub strong_regexp, "<b>\1<\b>"
  elsif input ~= em_regexp && intput.match(em_regexp).size < 4
    input.sub em_regexp, "<i>\1<\i>"
  end
end

Ваши спецификации не совсем понятны, но если вы понимаете это, вы можете настроить его самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...