当试图定义一种在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>发布于 2015-07-29 07:12:40
首先,如果我是你,我现在就不会写一个.tmlanguage,因为它们正被从崇高中删除。相反,乔恩创建了一种新的格式。你会在论坛上找到更多的信息。
第二,正则表达式的问题是试图将空间与.*匹配。但是.*和任何东西都匹配。使用\s*代替。
像^\s*([A-Za-z\\]+)\b这样的东西应该能起作用。\b的意思是单词边界。
编辑:我快读了你的问题。我将^与行的开头相匹配,但在您的示例中,它将不适用于[[ something else ]],因为行开始于[[,而不是空白。因此,您可能希望用^替换(?<=\[),以检查前面匹配的字符是否为[。
通过这两个(?<=\[|^)\s*([A-Za-z\\]+)\b,我得到了以下突出显示:

https://stackoverflow.com/questions/31679428
复制相似问题