You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jekyll中用正则匹配替换提取YouTube视频代码遇问题

解决Jekyll正则过滤器捕获组替换输出字面量的问题

你遇到的问题是:Jekyll自定义Ruby过滤器里,传入$6作为替换字符串时,输出的是$6字面量,而非预期的第六个正则捕获组内容。

原因很简单:Ruby的gsub方法在使用字符串作为替换参数时,只识别\1、\6这类格式的捕获组引用;而$1、$6是正则匹配后的全局变量,只能在代码块中使用。你在Liquid模板里传的是$6,原过滤器直接把它当普通字符串处理,所以会输出字面量。

修改过滤器代码即可解决问题,下面是调整后的版本:

module Jekyll
  module RegexFilter
    def replace_regex(input, reg_str, repl_str)
      re = Regexp.new(reg_str)
      # 处理替换字符串中的$n格式捕获组引用
      input.gsub(re) do |_match|
        repl_str.gsub(/\$(\d+)/) do |_n|
          eval("$#{$1}")
        end
      end
    end
  end
end

Liquid::Template.register_filter(Jekyll::RegexFilter)

这个版本会自动把替换字符串里的$6转换成对应的正则捕获组值,你不需要修改原来的Liquid调用代码,就能正确提取YouTube视频ID。

另外也可以直接把Liquid模板里的$6改成\6,保留原过滤器代码不变,但这种方式需要记住格式差异,通用性不如修改过滤器。

内容的提问来源于stack exchange,提问作者MrHinsh - Martin Hinshelwood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 22:55:26