【问题标题】:Jekyll filter for regex substitution in content?用于内容中正则表达式替换的 Jekyll 过滤器?
【发布时间】:2014-11-06 06:34:08
【问题描述】:

是否有 Jekyll 过滤器可以使用正则表达式 (regex) 过滤器替换文本?

我相信“内置”过滤器 replace 可以进行简单的字符串替换。

【问题讨论】:

    标签: jekyll liquid jekyll-extensions


    【解决方案1】:

    如果没有(更好的)解决方案,我将添加一个非常简单的插件来解决问题 - 将其作为文件 regex_filter.rb 放入您的 _plugins/ 文件夹中 - 它需要正则表达式作为字符串,作为第一个参数,替换作为第二个参数(例如,{{ 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)
    

    【讨论】:

    • 如果您使用它来替换 HTML,请确保将 re = Regexp.new reg_str 更改为 re = Regexp.new reg_str, 4 以匹配多行。
    • @CooperMaruyama 如果有一个命名常量,则永远不要使用魔术常量:Regexp::MULTILINE == 4
    • 同理,在这个GH问题中也有建议的解决方案:github.com/Shopify/liquid/issues/202#issuecomment-19112872(虽然这里给出的解决方案更完整)。
    • 不幸的是,这在 GitHub Pages 中不起作用,因为出于安全原因,它们不运行用户插件。
    • @CooperMaruyama 如果要替换的部分可以跨越多行而不是您需要的 Regexp::MULTILINE
    猜你喜欢
    • 1970-01-01
    • 2019-05-01
    • 2017-02-21
    • 2019-07-25
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    相关资源
    最近更新 更多