当前位置:首页 > 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 实现完整功能:

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 实现代码高亮:

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);

性能优化建议

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

js 实现markdown

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

注意事项

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

标签: jsmarkdown
分享给朋友:

相关文章

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js 实现全屏

js 实现全屏

使用 requestFullscreen 方法 通过调用元素的 requestFullscreen 方法可以实现全屏。该方法兼容现代浏览器,但不同浏览器可能需要前缀。 const element =…

js 实现按钮点击

js 实现按钮点击

实现按钮点击的 JavaScript 方法 HTML 按钮元素 在 HTML 中创建一个按钮,可以通过 <button> 或 <input> 标签实现: <button…

实现图片旋转js

实现图片旋转js

使用CSS transform属性旋转图片 通过CSS的transform属性可以轻松实现图片旋转。以下是一个简单的示例代码: const image = document.getElement…

js实现div隐藏

js实现div隐藏

使用CSS的display属性隐藏div 通过设置元素的display属性为none,可以完全隐藏div元素。这种方法不仅隐藏元素,还会从文档流中移除,不占据页面空间。 document.getEl…