我试图使用VS代码的标记化引擎进行语法注入,我不明白为什么有些正则表达式会失败。
例如,假设我有以下文本。
VS Code, TextMate grammars, and Oniguruma regular expressions. 然后,我希望使用以下Oniguruma (即见演示)来匹配regex:
(?=and\s+(Oniguruma)\s+regular)基于上面的演示,正则表达式似乎匹配(捕获?)我想要什么(即,见下文)。

然而,当在VS代码语法的上下文中尝试这一点时,它失败了。更具体地说,./syntaxes/some.test.injection.json文件包含:
{
"scopeName": "some.test.injection",
"injectionSelector": "L:text.html.markdown",
"patterns": [
{ "include": "#test" }
],
"repository": {
"test": {
"match": "(?=and\\s+(Oniguruma)\\s+regular)",
"captures": {
"1": { "name" : "some.test" }
}
}
}
}然后,在package.json中我有:
{
// ...
"contributes": {
"grammars": [
{
"scopeName": "some.test.injection",
"path": "./syntaxes/some.test.injection.json",
"injectTo": ["text.html.markdown"]
}
]
},
// ...
}最后,settings.json中的标记颜色规则如下所示:
{
"editor.tokenColorCustomizations": {
"textMateRules": [
{ "scope": "some.test", "settings": { "foreground": "#dfd43b" } },
]
}
}正如您在下面看到的,令牌没有被解析:

但是,当我使用以下regex (即见演示)时,令牌将被解析:
(?<=and\s)(Oniguruma)(?=\s+regular)在检查编辑器令牌和作用域时可以看到:

从VS代码文档 (即见下文)中,我了解到我需要使用Oniguruma正则表达式:
TextMate语法依赖于Oniguruma正则表达式,通常以plist或JSON的形式编写。您可以在这里找到关于TextMate语法的一个很好的介绍,您可以查看现有的TextMate语法,以了解它们如何工作。
我的问题有两个:
Oniguruma正则表达式吗?Oniguruma正则表达式?发布于 2022-08-12 18:13:16
VSCode使用TextMate作为令牌化引擎,TextMate使用oniguruma引擎作为Regex。
Ruby 1.9+使用oniguruma引擎。[医]风疹使用ruby2.5.9
我已经使用Rubular来验证我的VSCode TM语法一段时间了,而且它从未失败过一次。
https://stackoverflow.com/questions/71895384
复制相似问题