正则表达式匹配但不捕获中间部分

Regexp to match but don't capture middle part

我正在尝试在 Sublime Text 2 中创建自己的主题以突出显示 CSS 语法。我只剩下 keyframes.

@-webkit-keyframes spin { /* some rules */ }

@-moz-keyframes colorize { /* some rules */ }

@-ms-keyframes spin { /* some rules */ }

@-o-keyframes spin { /* some rules */ }

@keyframes colorize { /* some rules */ }


我想突出显示首字母 @ 和单词 keyframes 而不突出显示引擎前缀,例如 -webkit--moz-,所以只有 @keyframes必须 returned.

正确的正则表达式是什么?

我试过了:

((?<=-webkit-)|(?<=-moz-)|(?<=-ms-)|(?<=-o-)|)keyframes

但这不包括 @,甚至根本不包括 return Sublime 文本中的 keyframes


更新----

多亏了Cheruvian,我才意识到眼前的一切。

Sublime 的解析器结构是(我在意识到<key>name</key> 是什么之后添加了注释):

<dict>
    <!-- Regexp pattern -->
    <key>match</key>
    <string>\s*(@)(-(webkit|moz|ms|o)-)?(keyframes)</string>

    <!-- Referencing to the groups captured above -->
    <key>captures</key>
    <dict>

        <!-- 1st group captured -->
        <key>1</key>
        <dict>

            <!-- Referencing name -->
            <key>name</key>
            <string>keyword.control.keyframes.css</string>
        </dict>

        <!-- 2nd group captured -->
        <key>2</key>
        <dict>

            <!-- Referencing name -->
            <key>name</key>
            <string>punctuation.definition.keyword.css</string>
        </dict>

        <!-- n group captured -->
        <key>n</key>
        <dict>

            <!-- Referencing name -->
            <key>name</key>
            <string>some.name.css</string>
        </dict>
    </dict>
</dict>



由此,我所要做的就是对正则表达式和 select 我想要的组进行分组,并为它们提供一些独特的引用字符串。

假设 sublime 使用捕获组,你可以使用:

(@).*?(keyframes)

正则表达式捕获组用括号表示。 (来自phone稍后会尝试清理)