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

Get the first word in a pattern (using oniguruma on SublimeText)

当试图定义一种在 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>

首先,如果我是你,我现在不会编写 .tmlanguage,因为它们正从 sublime 中删除。相反,乔恩创建了一种新格式。 您将在论坛上找到更多信息。

您的正则表达式的第二个问题是您尝试将空格与 .* 匹配。但是 .* 匹配任何东西。请改用 \s*

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

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

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