【发布时间】:2014-12-12 14:12:00
【问题描述】:
我使用 angularJS,并且有各种指令遵循命名约定,如“app-data-grid”、“app-slider”、“app-carousel”或“app-compile-some-template”等。本质上,它是[app name]-[dash delimited words] 的正常角度指令命名约定。 Sublime Text HTML 语言语法高亮与正则表达式不匹配。它将突出显示"<app-carousel" 或"<app-some-long-directive-name" 中的“app”,但不会突出显示整个标签名称。
这是HTML.tmLanguage 文件中预定义的正则表达式:
(<)([a-zA-Z0-9:]++)(?=[^>]*></\2>)
我尝试在第二个匹配组的冒号后添加一个破折号:
(<)([a-zA-Z0-9:-]++)(?=[^>]*></\2>)
第二个正则表达式在正则表达式测试器中工作,但在 Sublime Text 中不起作用。
另外,我下载了一个 AngularJS 插件,它给了我一个 AngularJS-HTML 语言定义......它也有同样的问题。
如何修复正则表达式,使其与完整的标签名称匹配以突出显示?
【问题讨论】:
-
我不知道这个正则表达式应该如何匹配您发布的内容,您在哪个测试仪中尝试过这个以及您使用什么作为示例文本?
-
我使用link 来测试以下内容:
([a-zA-Z0-9:-]+)它与我预期的在 RegExr 中匹配,但在 Sublime 中不匹配。 Sublime 的原始 RegEx 在 RegExr 中不起作用(双加号把它扔掉了),可能是因为使用了不同的引擎?我使用“blah-blah-blah”作为示例文本,只是为了测试所有三个单词及其连字符是否匹配。 -
++在正则表达式中确实有一个含义:它意味着没有回溯。更具体地说,在这种情况下,这意味着一旦找到(&lt;)的匹配项,只有[a-zA-Z0-9:-]+的最佳匹配项才可以;如果这不能扩展到整个正则表达式的匹配,它将尝试为(&lt;)找到另一个匹配。例如,&lt;app-foo id="foo"&gt;&lt;app-foo&gt;将失败,因为[a-zA-Z0-9:-]++无法匹配app-foo,因为它可以匹配app-foo id="foo"。 (您也可以使用?+和{m,n}+。)
标签: html regex tags sublimetext2 syntax-highlighting