Sublime/Textmate/Atom 中的语法正则表达式

Grammar regex in Sublime/Textmate/Atom

在 Puppet 中有两种形式的 require:

关系

require foo

元参数

require => 'foo'

我想更改 Texmate/Sublime Text/Atom 语法,以便它可以正确突出显示它们。

现在代码如下所示(Atom 包,但它们都共享相同的 Textmate 样式正则表达式):

{
    'begin': '(?i)\b(import|include|require)\b\s*'
    'beginCaptures':
      '1':
        'name': 'keyword.control.import.include.puppet'
    'end': '(?=\s|$)'
    'name': 'meta.include.puppet'
}

但是,这意味着 require => 仍会突出显示:

如果语法正确,require =>应该是橙色。

如何更改正则表达式以满足此要求?是否需要单独的规则?

您可以添加一个否定的前瞻:

(?!.*=>)\b(import|include|require)\b\s*

这将断言该行不包含 => 参见 Live Demo

尝试使用正则表达式。我知道它很长,但试图涵盖很多可能性。

(?mi)(?<=\b)(require|import|include)\s+(=>\s*)?('\S+'|[^\s']+)\s*$

请参阅此处 DEMO