2014-09-12 10 views

Antwort

11

In dem Fall, dass es keine (bessere) Lösung gibt, werde ich das sehr offensichtlich einfache Plugin, das den Trick tun wird - Drop dies in Ihrem _plugins/ Ordner als die Datei regex_filter.rb - es dauert die Regex als ein String als erstes arg, und der Ersatz als zweites arg (zum Beispiel {{ 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

Großartiges Beispiel, sehr klar und genau, was ich brauchte. – Aaron

+0

Wenn Sie dies zum Ersetzen von HTML verwenden, müssen Sie 're = Regexp.new reg_str' in' re = Regexp.new reg_str, 4' ändern, damit es mit mehreren Zeilen übereinstimmt. –

+1

@CooperMaruyama verwenden niemals magische Konstanten, wenn es eine benannte Konstante für das gleiche gibt: ['Regexp :: MULTILINE'] (http://ruby-doc.org/core-2.0/Regexp.html#constants- list) == ['4'] (http://ruby-doc.org/core-2.0/Regexp.html#options-method) – TWiStErRob

-3

wie auf Jekyll erklärte documentation (aber sehr leicht zu übersehen):

Jekyll verwenden die Flüssigkeit Template-Sprache zum Bearbeiten von Vorlagen . Alle standardmäßigen Liquid-Tags und Filter werden unterstützt.

Daher können Sie verwenden (wie in Liquid's documentation angegeben) die

replace 

z.B.

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

Ohne das zusätzliche Plugin hinzufügen zu müssen!

Prost!

+0

Das hat für mich funktioniert. Vielen Dank! – railgun

+17

'' foo'' ist keine Regex. – TWiStErRob