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

如何使用Prism为自定义Note语言实现嵌套文本语法高亮?

修复Prism自定义Note语言的递归嵌套语法高亮问题

要让自定义Note语言支持术语与字符串的递归嵌套(如{bold(<28 days>)}、term-a(term-b(term-d))这类结构),需调整Prism语法规则,加入递归匹配逻辑。以下是修改方案:

完整修改代码

Prism.languages.note = {
  // 顶层表达式:匹配术语或字符串
  'expression': [
    {
      // 匹配术语结构:{term-name(...)}
      pattern: /{([\w-]+)\(([\s\S]*?)\)}/,
      inside: {
        'term-name': /^[\w-]+/,
        'arguments': {
          pattern: /\(([\s\S]*?)\)/,
          inside: {
            // 递归匹配参数内的表达式(术语或字符串)
            'expression': [
              { pattern: /{([\w-]+)\(([\s\S]*?)\)}/, inside: 'note' },
              { pattern: /<[^>]*>/, alias: 'string' }
            ]
          }
        }
      }
    },
    // 匹配字符串结构:<...>
    { pattern: /<[^>]*>/, alias: 'string' }
  ],
  // 注释规则
  'comment': { pattern: /\/\/.*/, alias: 'comment' }
};

// 基于markup扩展,保留基础高亮能力
Prism.languages.note = Prism.languages.extend('markup', Prism.languages.note);

核心修改说明

  • 递归嵌套支持:在术语的参数规则中,通过inside: 'note'引用整个Note语言规则,实现术语的多层嵌套识别(如term-b(term-d))。
  • 互嵌结构处理:允许术语参数内同时存在嵌套术语和字符串,字符串规则独立匹配,确保<28 days>这类内容在术语内部也能被正确高亮为字符串。
  • 跨行匹配优化:使用[\s\S]*?替代普通非贪婪匹配,确保嵌套内容跨行时也能被完整识别。

修改后,所有递归嵌套的术语与字符串结构都能正确高亮,符合预期效果。

内容的提问来源于stack exchange,提问作者Lance Pollard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:01:05