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

如何在Monaco Editor中配置支持多行字符串的语法高亮规则

解决Monaco Editor自定义语言多行引号字符串高亮问题

你猜的没错!Monaco的Monarch tokenizer默认是逐行解析内容的,所以你的正则表达式没法跨越多行匹配字符串。不过解决起来很简单,只需要给你的令牌规则加上@multiLine标志,同时微调正则表达式来正确匹配跨换行的内容就行。

修改后的令牌配置代码

// 为语言注册令牌提供器
monaco.languages.setMonarchTokensProvider('mySpecialLanguage', {
    tokenizer: {
        root: [
            // 添加@multiLine标志,让正则可以跨多行匹配
            [/"(?:[^"\\]|\\.)*"/gi, { token: 'my-string', next: '@pop', @multiLine: true }],
        ]
    }
});
// 定义仅匹配该语言规则的新主题
monaco.editor.defineTheme('myCoolTheme', {
    base: 'vs',
    inherit: false,
    rules: [
        { token: 'my-string', foreground: '0000FF' },
    ]
});

关键调整说明

  • @multiLine标志:这是核心!加上这个标志后,Monarch会允许当前正则表达式跨越多行文本进行匹配,而不是局限在单一行内。
  • 正则表达式优化:把原来的\\.\n{0,}改成\\.就足够了,因为\\.已经可以匹配任何转义字符(包括转义后的换行),而@multiLine会让整个正则自然跨换行匹配未转义的内容。
  • next: '@pop':虽然不是必须,但加上它可以明确告诉令牌解析器,匹配完字符串后回到之前的状态,让语法解析更严谨。

这样调整后,无论是单行的"A single line quote"还是跨多行的"But also a slightly weird multi line quote\nwith line breaks"都会被正确识别并高亮成蓝色啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 08:29:07