【问题标题】:Sublime Text syntax highlighting regex not workingSublime Text 语法突出显示正则表达式不起作用
【发布时间】: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”作为示例文本,只是为了测试所有三个单词及其连字符是否匹配。
  • ++ 在正则表达式中确实有一个含义:它意味着没有回溯。更具体地说,在这种情况下,这意味着一旦找到(<) 的匹配项,只有[a-zA-Z0-9:-]+ 的最佳匹配项才可以;如果这不能扩展到整个正则表达式的匹配,它将尝试为(<) 找到另一个匹配。例如,<app-foo id="foo"><app-foo> 将失败,因为[a-zA-Z0-9:-]++ 无法匹配app-foo,因为它可以匹配app-foo id="foo"。 (您也可以使用?+{m,n}+。)

标签: html regex tags sublimetext2 syntax-highlighting


【解决方案1】:

转到首选项>>设置-用户。

在此 JSON 上,将名为“HTML”的项添加到ignore_packages 数组中,如下所示:

"ignored_packages":
    [
        "Vintage",
        "HTML"
    ]

保存文件。

现在转到 Preferences >> Browse Packeges,复制 HTML 目录并将其重命名为“HTMLAngularJS”。

进入HTMLAngularJS目录,将文件“HTML.tmLanguage”重命名为“HTMLAngularJS.tmLanguage”。

编辑“HTMLAngularJS.tmLanguage”文件,找到这两个正则表达式:

<string>(&lt;)([a-zA-Z0-9:]++)(?=[^&gt;]*&gt;&lt;/\2&gt;)</string> Line 45

and

<string>(&lt;/?)([a-zA-Z0-9:]+)</string> Line 514

只需添加斜线和 - 在双点之后,应该是这样的:

<string>(&lt;)([a-zA-Z0-9:\-]++)(?=[^&gt;]*&gt;&lt;/\2&gt;)</string>

and

<string>(&lt;/?)([a-zA-Z0-9:\-]+)</string>

保存文件并快乐!

问候!

【讨论】:

  • 当我保存首选项文件时,它说包不存在。当我浏览包时,没有一个叫做 HTML。我想知道它是否只是在 ST3 中有所不同。
【解决方案2】:

使用HTML Extended sublime 插件

【讨论】:

    【解决方案3】:

    您是否在用户设置中将HTML 添加到ignore_package 数组中? 使用该条目,您将覆盖默认的 HTML 语法包,因此强制 sublime 使用您的 HTML.tmLanguage

    我从BoundinCode 中找到了this answer,他在其中解释了这一点,这实际上对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多