获取模式中的第一个单词(在 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 ]]
因为该行从 [[
开始而不是空白。
因此,您可能希望将 ^
替换为 (?<=\[)
,这将检查前一个匹配的字符是否为 [
.
同时 (?<=\[|^)\s*([A-Za-z\]+)\b
我得到了以下突出显示:
当试图定义一种在 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 ]]
因为该行从 [[
开始而不是空白。
因此,您可能希望将 ^
替换为 (?<=\[)
,这将检查前一个匹配的字符是否为 [
.
同时 (?<=\[|^)\s*([A-Za-z\]+)\b
我得到了以下突出显示: