【发布时间】:2015-09-07 13:52:13
【问题描述】:
我正在尝试创建一个自定义语法语言文件,以突出显示并帮助在 Sublime Text 2 中创建新文档。我已经走了很远,但我遇到了一个关于 tmLanguage 文件中正则表达式搜索的特定问题。我只是希望能够在 YAML 文档中的多行上匹配正则表达式,然后将其转换为 PList 以在 Sublime Text 中作为包使用。它不会工作。
This 是我的正则表达式:
/(foo[^.#]*bar)/
这就是它在 tmLanguage YAML 文档中的外观:
patterns:
- include: '#test'
repository:
test:
comment: Tester pattern
name: constant.numeric.xdoc
match: (foo[^.#]*bar)
如果我将此 YAML 构建为 tmLanguage 文件并将其用作 Sublime Text 中的包,我会创建一个使用此自定义语法的文档,尝试一下,会发生以下情况:
这将匹配:
foo 12345 bar
这将不匹配:
foo
12345
bar
在a Regex tester 中,它们应该并且都将匹配,但在我的 tmLanguage 文件中它不起作用。
我也已经尝试在 tmLanguage 文件中为我的正则表达式添加修饰符,但以下内容要么不起作用,要么完全破坏了文档:
match: (/foo[^.#]*bar/gm)
match: /(/foo[^.#]*bar/)/gm
match: /foo[^.#]*bar/gm
match: foo[^.#]*bar
注意:我的 Regex 规则在测试器中有效,此问题仅出现在 Sublime Text 2 中的 tmLanguage 文件中。
非常感谢任何帮助。
编辑:我使用匹配而不是开始/结束子句的原因是因为我想使用捕获组给它们不同的名称。如果有人有一个带有 begin 和 end 子句的解决方案,您仍然可以以不同的方式命名 'foo'、'12345' 和 'bar',我也可以。
【问题讨论】:
-
对不起,我在测试之前回答了:)我要删除,稍后再回答。
-
试试
name: my.new.variable // contentName: string.other // begin: 'foo' // end: 'bar' // patterns: // - include: $self // - name: support.keyword // match: [^.#]之类的(请重新格式化,因为 cmets 不允许换行)。 -
你有时间检查吗?我相信你需要检查this page for more help。
-
我知道 begin 和 end 子句,但我需要对 '#' 和 '.' 之间的不同部分进行编号。人物。这就是我使用 Regex 的原因,因为我可以使用捕获组来命名它们。
标签: regex sublimetext2