首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取模式中的第一个单词(在SublimeText上使用oniguruma )

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

Stack Overflow用户
提问于 2015-07-28 14:34:55
回答 1查看 761关注 0票数 0

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

我的目标是当它出现时:

代码语言:javascript
复制
[[something\something else else else]]

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

我在tmLanguage文件中的模式定义如下:

代码语言:javascript
复制
<key>begin</key>
<string>(\[\[)</string>
<key>end</key>
<string>(\]\])</string>
<key>name</key>
<string>text.html.foo.fam<string>

我尝试添加以下模式,但没有任何结果:

代码语言:javascript
复制
<key>patterns</key>
<array>
    <dict>
        <key>match</key>
        <string>(^(.*?([a-zA-Z\\]+.*?)){1})</string>
        <key>name</key>
        <string>entity.name.function</string>
    </dict>
</array>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-29 07:12:40

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

第二,正则表达式的问题是试图将空间与.*匹配。但是.*和任何东西都匹配。使用\s*代替。

^\s*([A-Za-z\\]+)\b这样的东西应该能起作用。\b的意思是单词边界。

编辑:我快读了你的问题。我将^与行的开头相匹配,但在您的示例中,它将不适用于[[ something else ]],因为行开始于[[,而不是空白。因此,您可能希望用^替换(?&lt;=\[),以检查前面匹配的字符是否为[

通过这两个(?&lt;=\[|^)\s*([A-Za-z\\]+)\b,我得到了以下突出显示:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31679428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档