marked.js简易手册

本文详细介绍marked.js的安装、配置及高级用法,包括语法高亮、自定义渲染、使用lexer和parser等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文介绍的是marked.js。秉持“来之即用”的原则,对它进行简要的翻译和归纳,

安装

在网上引用或者是引用本地文件即可。要么就用命令行:

npm install marked --save

最简单用法

    var rendererMD = new marked.Renderer();
    marked.setOptions({
      renderer: rendererMD,
      gfm: true,
      tables: true,
      breaks: false,
      pedantic: false,
      sanitize: false,
      smartLists: true,
      smartypants: false
    });//基本设置
    console.log(marked('I am using __markdown__.'));
    // Outputs: <p>I am using <strong>markdown</strong>.</p>

留意到,控制台打印出了带html文档标签的内容。

假使你的html页面中有一个<div id="content">,可以做如下设定:

//省去声明...    
document.getElementById('content').innerHTML =
      marked('# Marked in browser\n\nRendered by **marked**.');

那么文字将以innerHTML的形式传入#content的div中。

marked方法

marked(markdownString [,options] [,callback])

markdownString是你渲染的内容,必须是字符串。

options是你渲染的设置——它是一个对象。当然,你用marked.setOptions也是不错的。

callback是回调函数。I如果 options 参数没有定义,它就是第二个参数。

关于Options

之前看到,options有各种各样的设置。现在逐一分析。

highlight

这是一个函数,它可以让你文本的代码块实现语法高亮。

代码高亮基于highlight.js,本文将重点看这个例子的实现:

在此之前,你需要引入highlight.js及其样式:

<link href="http://cdn.bootcss.com/highlight.js/8.0/styles/monokai_sublime.min.css" rel="stylesheet">
<script src="http://cdn.bootcss.com/highlight.js/8.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

然后输入如下代码


var rendererMD = new marked.Renderer();
    marked.setOptions({
      renderer: rendererMD,
      gfm: true,
      tables: true,
      breaks: false,
      pedantic: false,
      sanitize: false,
      smartLists: true,
      smartypants: false
    });
    var markdownString = '```js\n console.log("hello"); \n```';
    marked.setOptions({
        highlight: function (code) {
        return hljs.highlightAuto(code).value;
      }
    });

    document.getElementById('content').innerHTML = marked(markdownString);

效果如下:

高亮的参数

完整的highlight方法包含三个参数:code,lang和callback

code——代码内容——是一个字符串。

lang——编程语言的种类——也是字符串。

callback就是回调函数。

renderer(渲染)

render存放的是一个对象,不声明时默认为new Renderer()

自定义渲染方式

渲染选项允许你以自定义的方式渲染内容,并把之前的规则设置覆盖掉。——这是比较底层的方法了。

比如,我想渲染# heading+,但是默认的规则是:<h1></h1>,我想改为更为复杂的结构——

var rendererMD = new marked.Renderer();
    rendererMD.heading = function (text, level) {
        var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-');
        return '<h' + level + '><a name="' +
                escapedText +
                 '" class="anchor" href="#' +
                 escapedText +
                 '"><span class="header-link"></span></a>' +
                  text + '</h' + level + '>';
    }


    console.log(marked('# heading+', { renderer: rendererMD }));
    document.getElementById('content').innerHTML = marked('# heading+', { renderer: rendererMD });

渲染的结果是:

<h1>
  <a name="heading-" class="anchor" href="#heading-">
    <span class="header-link"></span>
  </a>
  heading+
</h1>

以上就用了heading的渲染。

块级支持以下渲染
  • code(string code, string language)
  • blockquote(string quote)
  • html(string html)
  • heading(string text, number level)
  • hr()
  • list(string body, boolean ordered)
  • listitem(string text)
  • paragraph(string text)
  • table(string header, string body)
  • tablerow(string content)
  • tablecell(string content, object flags)

flags 拥有以下属性:

{
    header: true || false,
    align: 'center' || 'left' || 'right'
}
行级支持以下渲染:
  • strong(string text)
  • em(string text)
  • codespan(string code)
  • br()
  • del(string text)
  • link(string href, string title, string text)
  • image(string href, string title, string text)

其它渲染参数

gfm

它是一个布尔值,默认为true。

允许 Git Hub标准的markdown.

tables

它是一个布尔值,默认为true。

允许支持表格语法。该选项要求 gfm 为true。

breaks

它是一个布尔值,默认为false。

允许回车换行。该选项要求 gfm 为true。

pedantic

它是一个布尔值,默认为false。

尽可能地兼容 markdown.pl的晦涩部分。不纠正原始模型任何的不良行为和错误。

sanitize

它是一个布尔值,默认为false。

对输出进行过滤(清理),将忽略任何已经输入的html代码(标签)

smartLists

它是一个布尔值,默认为false。

使用比原生markdown更时髦的列表。 旧的列表将可能被作为pedantic的处理内容过滤掉.

smartypants

它是一个布尔值,默认为false。

使用更为时髦的标点,比如在引用语法中加入破折号。

使用lexer和parser

如果你想,还可以使用词法分析器。通过它可以追加规则:

    var tokens = marked.lexer('text');//把text解析为一个marked.js的内部对象
    console.log(marked.parser(tokens));//又把这个对象转化为html字符串。(<p>text</p>)

    var lexer = new marked.Lexer({sanitize: true});//放option信息
    var tokens = lexer.lex('<h1>hello</h1>');//<p>&lt;h1&gt;hello&lt;/h1&gt;</p>
    console.log(marked.parser(tokens));
    console.log(lexer.rules);//打出正则信息

原文地址:http://www.cnblogs.com/djtao/p/6224399.html

### 集成 marked.js 和 highlight.js 到 Vue 为了在 Vue 中集成 `marked.js` 和 `highlight.js`,可以按照以下方式操作: #### 安装依赖库 首先,在项目中安装所需的两个库: ```bash npm install marked highlight.js --save ``` #### 创建全局过滤器或方法用于处理 Markdown 转换 可以在项目的入口文件(如 `main.js` 或其他公共组件)中引入并配置这两个库。通过创建一个全局方法来完成 Markdown 的解析和代码高亮。 以下是具体实现代码示例: ```javascript // main.js 文件中的配置部分 import Vue from 'vue'; import marked from 'marked'; // 导入 marked 库 import hljs from 'highlight.js/lib/core'; // 导入 core 版本的 highlight.js import javascript from 'highlight.js/lib/languages/javascript'; // 添加 JavaScript 支持 hljs.registerLanguage('javascript', javascript); // 注册语言支持 // 自定义 marked 渲染器以启用代码高亮功能 const renderer = new marked.Renderer(); renderer.code = function(code, language) { const validLang = hljs.getLanguage(language) ? language : 'plaintext'; return `<pre><code class="hljs ${validLang}">${hljs.highlight(validLang, code).value}</code></pre>`; }; // 设置 marked 的选项 marked.setOptions({ renderer, highlight: function(code, lang) { return hljs.highlight(lang || 'plaintext', code).value; }, pedantic: false, gfm: true, breaks: false, sanitize: false, smartLists: true, smartypants: false, }); // 将 marked 方法挂载到 Vue 原型上以便全局访问 Vue.prototype.$marked = (text) => marked(text); ``` 上述代码实现了以下几个关键点[^1]: - 使用 `marked.Renderer()` 来定制化渲染逻辑。 - 在 `renderer.code` 函数中调用了 `highlight.js` 对代码片段进行高亮处理。 - 通过设置 `highlight` 属性让 `marked` 可以自动识别代码块的语言,并应用对应的样式。 #### 组件内的使用案例 下面是一个简单的 Vue 单文件组件例子展示如何利用 `$marked` 进行动态内容渲染: ```vue <template> <div v-html="$marked(content)"></div> <!-- 动态绑定 markdown 数据 --> </template> <script> export default { data() { return { content: ` # Hello World! Here is some **bold text**, and here's a block of code: \`\`\`javascript function helloWorld() { console.log("Hello world!"); } helloWorld(); \`\`\` `, }; }, }; </script> <style scoped> /* 如果需要额外样式 */ .hljs { display: block; overflow-x: auto; padding: 0.5em; background-color: #f8f8f8; color: #333; } </style> ``` 此模板会将字符串形式的 Markdown 文档转换为 HTML 并显示出来,同时其中嵌套的代码会被正确地高亮显示[^2]。 #### 注意事项 当使用 `v-html` 插值表达式时需要注意安全性问题,因为外部输入可能包含恶意脚本攻击风险。因此建议仅对可信源的数据执行此类操作或者采取进一步的安全措施比如转义特殊字符等。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值