Есть ли фильтр Jekyll, который заменит текст с помощью регулярного выражения (регулярное выражение)?Фильтр Jekyll для замещения регулярного выражения в содержимом?
Я считаю, что «встроенный» фильтр replace
выполняет простую замену строк.
Есть ли фильтр Jekyll, который заменит текст с помощью регулярного выражения (регулярное выражение)?Фильтр Jekyll для замещения регулярного выражения в содержимом?
Я считаю, что «встроенный» фильтр replace
выполняет простую замену строк.
В случае, если нет (лучшего) решения, я заброшу очень очевидный простой плагин, который сделает трюк - отбросьте его в папку _plugins/
в виде файла regex_filter.rb
- он принимает регулярное выражение как строка, в качестве первого ARG, и замен в качестве второго Arg (например, {{ page.url | replace_regex: '/$', '' }}
:
module Jekyll
module RegexFilter
def replace_regex(input, reg_str, repl_str)
re = Regexp.new reg_str
# This will be returned
input.gsub re, repl_str
end
end
end
Liquid::Template.register_filter(Jekyll::RegexFilter)
Как указан на Джекил documentation (но очень легко пропустить):
Джекил использует жидкость язык шаблонов для обработки шаблонов , Поддерживаются все стандартные ярлыки и фильтры Liquid.
Таким образом, вы можете использовать (как указано in Liquid's documentation)
replace
например
replace - replace each occurrence e.g. {{ 'foofoo' | replace:'foo','bar' }} #=> 'barbar'
Не нужно добавлять дополнительный плагин!
Cheers!
Это сработало для меня. Благодаря! – railgun
'' foo'' не является регулярным выражением. – TWiStErRob
Отличный пример, очень ясный и именно то, что мне нужно. – Aaron
Если вы используете это для замены HTML, обязательно измените 're = Regexp.new reg_str' на' re = Regexp.new reg_str, 4', чтобы он соответствовал нескольким строкам. –
@CooperMaruyama никогда не используют магические константы, если для них есть именованная константа: ['Regexp :: MULTILINE'] (http://ruby-doc.org/core-2.2.0/Regexp.html#constants- список) == ['4'] (http://ruby-doc.org/core-2.2.0/Regexp.html#options-method) – TWiStErRob