Regex Visual Studio代码中使用了哪种正则表达式变体?

Regex Visual Studio代码中使用了哪种正则表达式变体?,regex,visual-studio-code,vscode-extensions,Regex,Visual Studio Code,Vscode Extensions,我知道我可以在tmLanguage文件中使用Ruby的正则表达式,但是在其他配置文件中(例如扩展名)似乎不是这样。以中的第一行值为例。当我使用字符类(例如\s或\p{L})时,会出现错误。因此,我想知道那里究竟允许什么。您如何匹配那里的空白 更新: 在评论之后,我尝试了以下方法: "firstLine": "^(lexer|parser)?\\s*grammar\\w+;" 它应该匹配第一行,如lexer grammar G1或只是语法G1。有没有一种方法可以测试这种方法是否有效,因为我没有其

我知道我可以在tmLanguage文件中使用Ruby的正则表达式,但是在其他配置文件中(例如扩展名)似乎不是这样。以中的
第一行
值为例。当我使用字符类(例如
\s
\p{L}
)时,会出现错误。因此,我想知道那里究竟允许什么。您如何匹配那里的空白

更新: 在评论之后,我尝试了以下方法:

"firstLine": "^(lexer|parser)?\\s*grammar\\w+;"
它应该匹配第一行,如
lexer grammar G1或只是
语法G1。有没有一种方法可以测试这种方法是否有效,因为我没有其他的验证方法

更新2

使用正确的语法至关重要,它将神奇地发挥作用:

"firstLine": "^(lexer|parser)?\\s*grammar\\s*\\w+\\s*;"

.NET正则表达式使用的语法主要基于Perl 5,但它确实添加了一些新功能,如命名捕获组和从右到左匹配,因此不应将两者视为完全相同。以下是.NET正则表达式的完整MSDN文档:


\s
在.NET中是一个有效的字符类,但是如果没有看到您正在尝试的代码,就很难准确地说出问题所在。Andrew可能是对的,你只是没有逃过
\

你没有显示自己的
第一行的完整值,所以我看不出你是否记得逃过反斜杠,比如
\\s
。不,我没有逃过
\s
。在我的tmLanguage文件中不需要它。在您的更新中,结尾分号是可选的吗?你似乎有必要这样做。由于文件是json,您必须这样做。至于测试,我想您可以在您希望它使用的文件上测试它。VS代码不使用.NET正则表达式。另请参见问题。@Eric,您提到的问题是关于搜索小部件的,而不是用于创建新语言的语法突出显示定义文件……是的,这些问题实际上是相同的。不是内容,而是实际的问题标题。