2014-09-12 17 views

risposta

11

Nel caso in cui non esista una (migliore) soluzione, inserirò il plug-in molto semplice che farà il trucco - inseriscilo nella tua cartella _plugins/ come file regex_filter.rb - prende la regex come stringa, come primo arg, e la sostituzione come secondo arg (ad esempio, {{ 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

Ottimo esempio, molto chiaro ed esattamente quello di cui avevo bisogno. – Aaron

+0

Se stai usando questo per sostituire HTML, assicurati di cambiare 're = Regexp.new reg_str' in' re = Regexp.new reg_str, 4' in modo che corrisponda a più righe. –

+1

@CooperMaruyama non usano mai le costanti magiche se c'è una costante denominata per lo stesso: ['Regexp :: MULTILINE'] (http://ruby-doc.org/core-2.2.0/Regexp.html#constants- list) == ['4'] (http://ruby-doc.org/core-2.2.0/Regexp.html#options-method) – TWiStErRob

-3

come indicato sul Jekyll di documentation (ma molto facile perdere):

Jekyll utilizza il liquido linguaggio dei modelli per elaborare i modelli . Sono supportati tutti i tag e i filtri liquidi standard.

Pertanto, è possibile utilizzare (come indicato in Liquid's documentation) il

replace 

esempio

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

Senza bisogno di aggiungere il plugin aggiuntivo!

Cheers!

+0

Questo ha funzionato per me. Grazie! – railgun

+17

''foo'' non è un'espressione regolare. – TWiStErRob