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

时间:2015-03-04 16:20:10

标签: sublimetext2 pcre

我试图在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必须是返回。

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

我试过了:

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

但这并不包含@,甚至根本不会返回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>



从那以后,我所要做的就是对正则表达式进行分组并选择我想要的组,并为它们提供一些独特的引用字符串。

1 个答案:

答案 0 :(得分:1)

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

(@).*?(keyframes)

正则表达式捕获组由括号表示。 (从手机将尝试稍后清理)