核心 API


Highlight.js 将一些函数作为 hljs 对象的方法导出。

highlight
highlight(code, {language, ignoreIllegals})

代码高亮核心方法。该方法将一段需要高亮的代码(字符串)作为参数传入,同时传入的还有一个配置项参数(对象)。配置项中必须带有 language 属性,其指定一项语言名称或别名,然后代码会按照所指定的语言语法进行高亮处理。ignoreIllegals 是一个可选参数,在设为 true 的时候,即使检测到指定语言的非法语法,也会继续处理剩余内容直至完成而不是抛出异常。

该方法的返回值是一个具有下列属性的对象:

  • language:语言名称,与传入的 language 同值,之所以要返回是为了与 highlightAuto 函数保持一致
  • relevance整型值,这段代码针对该语言的相关性得分
  • value:已经添加好高亮标记的 HTML 字符串
  • illegal:布尔值,表示是否发现任何非法匹配
  • code:原始传入的代码块
highlightAuto
highlightAuto(code, languageSubset)

该方法可以实现语言自动检测。传入需要进行高亮渲染的代码字符串,还可以传一个可选参数,其是一个语言子集数组,它将限制接口在该子集中选择语言进行检测。另外,通过 configure 方法 也可以进行语言子集设置,但优先使用接口参数的语言子集,即接口参数的语言子集会覆盖配置项的语言子集。

返回一个具有下列属性的对象:

  • language: 检测到的语言
  • relevance: 整型值,这段代码针对匹配语言的相关性得分
  • value: 已经添加好高亮标记的 HTML 字符串
  • secondBest: 第二匹配结果,数据结构相同的对象(未来可能废除)
highlightElement
highlightElement(element)

对含有代码的 DOM 节点进行高亮处理。

该方法可对代码进行动态高亮处理,一般应用在页面加载后或在第三方 JavaScript 框架的初始化代码中。

该方法默认自动检测语言,但你可以在 DOM 节点的 class 属性中指定语言。关于所有可用的语言名称和有效作用域引用,请参见作用域引用文档

highlightAll

将页面上所有与 cssSelector 配置项相匹配的元素进行代码高亮处理。默认的 cssSelector 值是 'pre code',表示对所有 <pre> 下的 <code> 标签内容执行高亮处理。该方法在页面 onload 事件触发前或触发后调用都可以。

configure
configure(options)

配置全局配置项:

  • classPrefix: 为高亮后的代码块添加 CSS 类前缀。译者注:默认为 hljs-
  • languages: 由语言名称(或别名)构成的数组,将语言自动检测范围限制在该数组内。
  • languageDetectRe: 指定一个正则表达式,该正则表达式用来配置 CSS 类名与语言名称的映射方式(比方说,允许将默认的 language-php 改成自定义的 color-as-php 等)。
  • noHighlightRe: 一个正则表达式,其配置了哪些 CSS 类会跳过高亮处理。
  • cssSelector: 一个 CSS 选择器,用于配置哪些元素作用于 hljs.highlightAll 从而高亮显示。默认为 'pre code'
  • ignoreUnescapedHTML: 若设为 true,则将忽略未转义的 HTML 代码,不会因此向控制台打印警告记录。
  • throwUnescapedHTML:highlightElement 中进行高亮处理的内容中存在未转义 HTML 代码时,highlightjs 会抛出一个 HTMLInjectionError 异常。

本方法传入一个对象参数,仅设置需要修改的配置值,不用改的则无需包含

hljs.configure({
  noHighlightRe: /^do-not-highlightme$/i,
  languageDetectRe: /\bgrammar-([\w-]+)\b/i, // for `grammar-swift` style CSS naming
  classPrefix: ''     // don't append class prefix
                      // … other options aren't changed
});
registerLanguage
registerLanguage(languageName, languageDefinition)

向语言库中添加新语种。主要用于内部调试。

  • languageName: 字符串,要注册的语言名称
  • languageDefinition: 它是一个函数,其返回一个定义语法的对象。该函数会传递给 hljs 对象,以便能够解析其中定义的通用正则表达式。

举个例子:

hljs.registerLanguage('custom', function(hljs) {
  return {
    contains: [
      {
        // 匹配所有的字符串,但忽略以“!$”开头的字符串
        className: 'string',
        begin: /(!\$)?"/,
        end: /"/,
        relevance: 0,
        illegal: /\n/,
        contains: [{begin: /!$/, relevance: 0}, {begin: /\\./}]
        // 如果匹配到以“!$”开头的字符串,则忽略该匹配结果
        relevance: 10,
        relevance: (response) => {
          if (response[0].startsWith('!$')) {
            response.ignoreMatch();
          }
          return 10;
        }
      }
    ]
  };
});
unregisterLanguage
unregisterLanguage(languageName)

从语种库中删除指定的语言及其所有别名。主要用于内部调试。

  • languageName: 字符串,要删除的语言名称
registerAliases
registerAliases(alias|aliases, {languageName})

为指定的语言注册别名,其通过 languageName 参数指定。

  • alias|aliases: 可以是个字符串,也可以是个数组。表示要注册的别名
  • languageName: 语言名称,就是传入 registerLanguage 方法的那个 languageName
listLanguages

返回语言列表。

getLanguage
getLanguage(name)

按名称或别名查找一种语言。

若存在,返回语言对象,否则返回 undefined

versionString
versionString()

以字符串方式返回 Highlight.js 完整版本号,例如:"11.0.1"

safeMode
safeMode()

启用安全模式。这是默认模式,其可以为生产环境提供最为可靠的一种模式。

debugMode
debugMode()

启用 调试/开发 模式。

注意:这种模式下 Highlight.js 更容易报错中断!通常只有进行语言调试或插件库自身的测试环境或开发环境下才会启用。

举个例子,如果一个新版本突然出现了一个严重 bug(或进行了重大版本更新),而其只影响到一种语言的情况下:

  • 在安全模式下,所有其他语言仍然能够高亮显示,而有问题的语言仅作为一个代码块输出,没有任何高亮处理(就像它是纯文本一样)。
  • 在调试模式下,所有高亮处理都会停止,并且抛出一个 JavaScript 错误。

已弃用 API


highlight

10.7 版本后已弃用:将在 v12 中完全删除。

highlight(languageName, code)

请参阅上文已说明的新版 API译者注:新版 highlight() 与 旧版 highlight() 的区别在于传递的参数不同

highlightBlock

11.0 版本后已弃用:请使用 highlightElement() 代替。

initHighlighting

10.6 版本后已弃用:请使用 highlightAll() 代替。

initHighlightingOnLoad

10.6 版本后已弃用:请使用 highlightAll() 代替。