javascript - 扩展 VSCode Markdown 语法高亮以匹配嵌套的 Javascript 代码

标签 javascript regex visual-studio-code vscode-extensions textmate

我正在尝试扩展 VSCode 的 Markdown 语法荧光笔,以突出显示一些包含在自定义语法中的嵌套 Javascript。比如下面的 Markdown 文件

# Example

@@$ var value = 10;

The result is @@{value}.

将转换为

# Example

The result is 10.

我希望在 VSCode 中将以下内容突出显示为 Javascript,就好像它们被包裹在一个围栏代码块中一样:

  • @@$ 开头的行的内容。

  • @@{ 之间的内容。

我尝试修改 markdown.tmLanguage.json 来添加这些:

"fenced_code_block_majsdown2": {
    "begin": "(^|\\G)(@@$)",
    "name": "markup.fenced_code.block.markdown",
    "end": "(^|\\G)(\\r\\n|\\r|\\n)\\s*$",
    "patterns": [{ "include": "source.js" }]
},
"fenced_code_block_majsdown": {
    "begin": "(^|\\G)(@@{)",
    "name": "markup.fenced_code.block.markdown",
    "end": "(^|\\G)(})\\s*$",
    "patterns": [{ "include": "source.js" }]
},

代码正确突出显示,但似乎忽略了 "end" 位,我不明白为什么 -- 从 @@$ 开始或 @@{,整个文档被突出显示为 Javascript。我尝试了几种正则表达式的组合,并尝试删除初始部分 ((^|\\G)),但我无法弄清楚为什么荧光笔如此贪婪。

我怎样才能实现我想要的目标?

最佳答案

我最终以这种方式解决了这个问题:

{
    "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
    "name": "Majsdown",
    "patterns": [
        {
            "include": "#majsdown_inject_expression"
        },
        {
            "include": "#majsdown_execute_statement"
        },
        {
            "include": "text.html.markdown"
        }
    ],
    "repository": {
        "majsdown_inject_expression": {
            "begin": "(.*?)(@@\\{)",
            "name": "test",
            "end": "(\\})",
            "beginCaptures": {
                "2": {
                    "name": "keyword.control.majsdown"
                }
            },
            "endCaptures": {
                "1": {
                    "name": "keyword.control.majsdown"
                }
            },
            "patterns": [
                {
                    "include": "source.js"
                }
            ]
        },
        "majsdown_execute_statement": {
            "begin": "(.*?)(@@\\$)",
            "name": "test",
            "end": "(\\r\\n|\\r|\\n)",
            "beginCaptures": {
                "2": {
                    "name": "keyword.control.majsdown"
                }
            },
            "patterns": [
                {
                    "include": "source.js"
                }
            ]
        }
    },
    "scopeName": "source.majsdown"
}

关于javascript - 扩展 VSCode Markdown 语法高亮以匹配嵌套的 Javascript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70481778/

相关文章:

javascript - innerHTML 适用于 IE 和 Firefox,但不适用于 Chrome

visual-studio-code - 如何在 Windows 和 MacOS 之间共享 VS Code 键绑定(bind)?

typescript - Visual Studio Code - TypeScript - 当 tsconfig.json 包含数据时不显示内联错误

javascript - 重写正则表达式以用于比较?

regex - sed 将两个搜索条件应用于一行,然后替换

visual-studio-code - 即使在关闭编辑器后如何保持编辑器组固定?

javascript - karma 单元测试 : Module name "react" has not been loaded yet for context: _. 使用 require([])

javascript - 如何使用 JQuery 显示下拉菜单中选定的值?

javascript - Angular 重复服务

匹配短语的正则表达式,除非它已经加前缀