Regex для значения в скобках усов, игнорируя ошибочные пробелы - PullRequest
0 голосов
/ 20 ноября 2018

В настоящее время я пытаюсь использовать Regex для получения значения в синтаксических скобках Усов, например:

Hello {{{ name }}}, {{{greeting}}}. what is your favourite code related website {{ code question website!!! ?? ? }}? here is some random fact {{ random fun fact }}

Я пытаюсь выбрать все, кроме скобок, а также начальные и конечные пробелы(В случае, если пользователь добавляет больше случайно) или, скорее, я хотел бы использовать группы для захвата этих 3 элементов

  • группа 1: '{' и ведущий пробел
  • группа 2:значение, которое мы хотим
  • группа 3: завершающий пробел и '}'

до сих пор я придумал следующее ({{2,3}\s*)([^{}]*)(\s*}{2,3}), но если вы проверите группы захвата, 2-я группасоответствует тогда значению, которое мы хотим ... Что хорошо, но также и конечный пробел, который должен быть в третьей группе.то есть

  • группа 1: '{' и первые пробелы
  • группа 2: значение, которое мы хотим получить с конечным пробелом
  • группа 3: '}'

Реализация Ruby str.gsub(/({{2,3}\s*)([^{}]*)(\s*}{2,3})/) { |_| $~[1]+Base64.urlsafe_encode64($~[2].strip, padding: false)+$~[3] }

1 Ответ

0 голосов
/ 20 ноября 2018

Один из вариантов - scan ваша входная строка в массив соответствует, используя следующий шаблон:

\{+\s*([^{}]+)\s*\}+

Это будет захватывать весь контент, появляющийся между (предположительно) вложенными наборами фигурных скобок.Затем мы можем сгладить этот массив в одноуровневый массив совпадений строк из одной группы захвата и собрать, удалив начальные и конечные пробелы.

str = "Hello {{{ name }}}, {{{greeting}}}. what is your favourite code related website {{ code question website!!! ?? ? }}? here is some random fact {{ random fun  fact    }}"
arr = str.scan(/\{+\s*([^{}]+)\s*\}+/)
print arr.flatten.collect{|x| x.strip || x }

["name", "greeting", "code question website!!! ?? ?", "random fun  fact"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...