Regex Visual Studio代码中使用了哪种正则表达式变体?
我知道我可以在tmLanguage文件中使用Ruby的正则表达式,但是在其他配置文件中(例如扩展名)似乎不是这样。以中的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。有没有一种方法可以测试这种方法是否有效,因为我没有其
第一行
值为例。当我使用字符类(例如\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,您提到的问题是关于搜索小部件的,而不是用于创建新语言的语法突出显示定义文件……是的,这些问题实际上是相同的。不是内容,而是实际的问题标题。