2014-09-12 1 views

ответ

11

В случае, если нет (лучшего) решения, я заброшу очень очевидный простой плагин, который сделает трюк - отбросьте его в папку _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) 
+1

Отличный пример, очень ясный и именно то, что мне нужно. – Aaron

+0

Если вы используете это для замены HTML, обязательно измените 're = Regexp.new reg_str' на' re = Regexp.new reg_str, 4', чтобы он соответствовал нескольким строкам. –

+1

@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

-3

Как указан на Джекил documentation (но очень легко пропустить):

Джекил использует жидкость язык шаблонов для обработки шаблонов , Поддерживаются все стандартные ярлыки и фильтры Liquid.

Таким образом, вы можете использовать (как указано in Liquid's documentation)

replace 

например

replace - replace each occurrence e.g. {{ 'foofoo' | replace:'foo','bar' }} #=> 'barbar'   

Не нужно добавлять дополнительный плагин!

Cheers!

+0

Это сработало для меня. Благодаря! – railgun

+17

'' foo'' не является регулярным выражением. – TWiStErRob

Смежные вопросы