当尝试定义在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>
答案 0 :(得分:1)
首先,如果我是你,我现在不会写一个.tmlanguage,因为它们是从崇高中删除的。而是由Jon创建了一种新的格式。 您可以在论坛上找到更多信息。
其次,正则表达式的问题在于您尝试将空格与.*
匹配。但是.*
匹配任何东西。请改用\s*
。
像^\s*([A-Za-z\\]+)\b
这样的东西应该可以解决问题。
\b
表示单词边界。
编辑:我快速阅读你的问题。我将^
与该行的开头匹配,但在您的情况下,它不适用于[[ something else ]]
,因为该行在[[
上开始而不是空白。
因此,您可能希望将^
替换为(?<=\[)
,以检查上一个匹配的字符是否为[
。
同时(?<=\[|^)\s*([A-Za-z\\]+)\b
我得到了以下突出显示: