获取模式中的第一个单词(在SublimeText上使用oniguruma)

时间:2015-07-28 14:34:55

标签: regex syntax-highlighting sublimetext3 sublimetext oniguruma

当尝试定义在SublimeText上扩展HTML的新语言时,我似乎无法找到正确的语法来获取模式上的第一个单词。

我的目标是什么时候出现:

[[something\something else else else]]

单词" something"将有不同的范围。

我的tmLanguage文件中的模式定义如下:

<key>begin</key>
<string>(\[\[)</string>
<key>end</key>
<string>(\]\])</string>
<key>name</key>
<string>text.html.foo.fam<string>

我尝试添加以下模式而没有任何运气:

<key>patterns</key>
<array>
    <dict>
        <key>match</key>
        <string>(^(.*?([a-zA-Z\\]+.*?)){1})</string>
        <key>name</key>
        <string>entity.name.function</string>
    </dict>
</array>

1 个答案:

答案 0 :(得分:1)

首先,如果我是你,我现在不会写一个.tmlanguage,因为它们是从崇高中删除的。而是由Jon创建了一种新的格式。 您可以在论坛上找到更多信息。

其次,正则表达式的问题在于您尝试将空格与.*匹配。但是.*匹配任何东西。请改用\s*

^\s*([A-Za-z\\]+)\b这样的东西应该可以解决问题。 \b表示单词边界。

编辑:我快速阅读你的问题。我将^与该行的开头匹配,但在您的情况下,它不适用于[[ something else ]],因为该行在[[上开始而不是空白。 因此,您可能希望将^替换为(?&lt;=\[),以检查上一个匹配的字符是否为[

同时(?&lt;=\[|^)\s*([A-Za-z\\]+)\b我得到了以下突出显示:

screenshot