当前位置:首页 > JavaScript

js 实现markdown

2026-04-07 03:02:49JavaScript

实现 Markdown 解析的基本思路

在 JavaScript 中实现 Markdown 解析通常涉及以下核心步骤:解析文本为抽象语法树(AST),再将 AST 转换为目标格式(如 HTML)。以下是具体实现方法。

使用正则表达式实现简单解析

对于基础需求,可以通过正则表达式匹配 Markdown 语法并替换为 HTML。例如解析标题和段落:

function parseMarkdown(markdown) {
  // 解析标题(如 ## Heading -> <h2>Heading</h2>)
  let html = markdown.replace(/^#{1,6}\s(.+)$/gm, (match, p1) => {
    const level = match.match(/#/g).length;
    return `<h${level}>${p1}</h${level}>`;
  });

  // 解析段落(普通文本 -> <p>text</p>)
  html = html.replace(/^(?!<h\d>)(.+)$/gm, '<p>$1</p>');
  return html;
}

使用现有库(如 marked.js)

推荐使用成熟的库如 marked.js 实现完整功能:

js 实现markdown

import { marked } from 'marked';

const markdown = '# Hello World';
const html = marked.parse(markdown);
console.log(html); // 输出: <h1>Hello World</h1>

自定义渲染规则

若需定制输出,可覆盖默认渲染器。例如修改链接的渲染行为:

const renderer = new marked.Renderer();
renderer.link = (href, title, text) => {
  return `<a href="${href}" target="_blank">${text}</a>`;
};

marked.setOptions({ renderer });

处理代码块与语法高亮

结合 highlight.js 实现代码高亮:

js 实现markdown

import hljs from 'highlight.js';

marked.setOptions({
  highlight: (code, lang) => {
    return hljs.highlightAuto(code, [lang]).value;
  }
});

安全性处理

防止 XSS 攻击需清理 HTML:

import DOMPurify from 'dompurify';

const unsafeHtml = marked.parse(userInput);
const safeHtml = DOMPurify.sanitize(unsafeHtml);

性能优化建议

对于大型文档,采用异步解析避免阻塞:

marked.parse(markdownText, { async: true })
  .then(html => console.log(html));

注意事项

  • 复杂表格、数学公式等需依赖扩展(如 markdown-it
  • 行内 HTML 和注释需显式启用配置选项
  • 考虑服务端渲染(SSR)时兼容 Node.js 环境

标签: jsmarkdown
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现文件夹

js实现文件夹

使用JavaScript创建文件夹 在浏览器端的JavaScript中无法直接操作文件系统创建文件夹,这是出于安全考虑。但在Node.js环境中可以通过文件系统模块(fs)实现。 Node.js中使…

js 实现mvc

js 实现mvc

MVC 模式简介 MVC(Model-View-Controller)是一种软件设计模式,将应用程序分为三个核心组件:模型(Model)处理数据和业务逻辑,视图(View)负责展示数据,控制器(Con…