IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 用JavaScript编写一个非常简单的Markdown解析器 -> 正文阅读

[JavaScript知识库]用JavaScript编写一个非常简单的Markdown解析器

本文介绍一个非常简单的Markdown解析器,示例代码的文件目录结构如下:

.
├── css
│   └── style.css
├── main.html
└── script
    └── markdownparser.js

测试环境

Ubuntu 20.04
Chrome 95.0.4638.54
FireFox 93.0 (64 位)


1、main.html

<!DOCTYPE html>
<!--CSDN,繁星间漫步,陆巍的博客-->
<html lang="zh-cn">
<link rel="stylesheet" href="css/style.css">
<script src="script/markdownparser.js"></script>

<title>一个非常简单的Markdown解析器</title>

<div class="markdown-editor">
  <!--不要使用onchange来触发,因为onchange只在焦点离开textarea控件时才被触发。oninput会实时监听内容变化并触发。-->
  <textarea class="markdown-code" id="markdown-input" oninput="preview()"></textarea>
</div>

<div class="html-viewer">
  <div id="markdown-output"></div>
</div>

</html>

2、style.css

.markdown-code {
	height: 700px;
	width: 400px;
	margin: auto;
	float: left;
}
.html-viewer {
	height: 700px;
	width: 400px;
	margin: auto;
	border: 1px lightgray solid;
}

3、markdownparser.js

// CSDN,繁星间漫步,陆巍的博客

// @brief 解析转换markdown文本为html文本
// @param markdownText markdown文本
// @return 返回html文本
function parseMarkdown(markdownText) {
  var htmlText = markdownText
    .replace(/^- (.*$)\n/gim, '<li>$1</li>')// 简单的无序列表 -
    .replace(/^---\n/gm, '<hr />')// 水平线 ---
    .replace(/^##### (.*$)/gim, '<h5>$1</h5>')// 标题5 #####
    .replace(/^#### (.*$)/gim, '<h4>$1</h4>')// 标题4 ####
    .replace(/^### (.*$)/gim, '<h3>$1</h3>')// 标题3 ###
    .replace(/^## (.*$)/gim, '<h2>$1</h2>')// 标题2 ##
    .replace(/^# (.*$)/gim, '<h1>$1</h1>')// 标题1 #
    .replace(/^\> (.*$)/gim, '<blockquote>$1</blockquote>')// 长引用 >
    .replace(/\*\*(.*)\*\*/gim, '<b>$1</b>')// 加粗 **abc**
    .replace(/\*(.*)\*/gim, '<i>$1</i>')// 斜体 *abc*
    .replace(/!\[(.*?)\]\((.*?)\)/gim, "<img alt='$1' src='$2' />")// 图片 ![图片说明](图片地址)
    .replace(/\[(.*?)\]\((.*?)\)/gim, "<a href='$2'>$1</a>")// 超链接 [链接显示文字](链接地址)
    .replace(/\n$/gim, '<br />')// 换行,把用户输入的换行用<br />来处理

  return htmlText;
}

// @brief 预览
function preview() {
  var editor = document.getElementById("markdown-input");
  var viewer = document.getElementById("markdown-output");

  viewer.innerHTML = parseMarkdown(editor.value);
}

效果如下:
一个非常简单的Markdown解析器示例图
以上代码中对无序列表只是非常简单的处理,正式的解析方法要稍微麻烦一些,本例仅是一个非常简单的例子,所以暂时不列出。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-24 14:50:47  更:2021-10-24 14:53:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 10:57:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码