0

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

我的目标是何时出现:

[[something\something else else else]]

“某物”这个词将有不同的范围。

我在 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>
4

1 回答 1

1

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

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

类似的东西^\s*([A-Za-z\\]+)\b应该可以解决问题。意思是词的\b边界。

编辑:我快速阅读了您的问题。我把^匹配行的开头,但是,在你的情况下,它不会工作,[[ something else ]]因为行开始[[不是空白。因此,您可能希望替换^(?&lt;=\[)将检查先前匹配的字符是否为[.

两者(?&lt;=\[|^)\s*([A-Za-z\\]+)\b都有以下突出显示:

截屏

于 2015-07-29T07:12:40.473 回答