Gibt es einen Jekyll-Filter, der den Text durch einen regulären Ausdruck (Regex) ersetzt?Jekyll-Filter für Regex-Substitution im Inhalt?
Ich glaube, dass der "eingebaute" Filter replace
einfache String-Substitution tut.
Gibt es einen Jekyll-Filter, der den Text durch einen regulären Ausdruck (Regex) ersetzt?Jekyll-Filter für Regex-Substitution im Inhalt?
Ich glaube, dass der "eingebaute" Filter replace
einfache String-Substitution tut.
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)
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!
Das hat für mich funktioniert. Vielen Dank! – railgun
'' foo'' ist keine Regex. – TWiStErRob
Großartiges Beispiel, sehr klar und genau, was ich brauchte. – Aaron
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. –
@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