本文介绍一个非常简单的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>
<html lang="zh-cn">
<link rel="stylesheet" href="css/style.css">
<script src="script/markdownparser.js"></script>
<title>一个非常简单的Markdown解析器</title>
<div class="markdown-editor">
<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
function parseMarkdown(markdownText) {
var htmlText = markdownText
.replace(/^- (.*$)\n/gim, '<li>$1</li>')
.replace(/^---\n/gm, '<hr />')
.replace(/^##### (.*$)/gim, '<h5>$1</h5>')
.replace(/^#### (.*$)/gim, '<h4>$1</h4>')
.replace(/^### (.*$)/gim, '<h3>$1</h3>')
.replace(/^## (.*$)/gim, '<h2>$1</h2>')
.replace(/^# (.*$)/gim, '<h1>$1</h1>')
.replace(/^\> (.*$)/gim, '<blockquote>$1</blockquote>')
.replace(/\*\*(.*)\*\*/gim, '<b>$1</b>')
.replace(/\*(.*)\*/gim, '<i>$1</i>')
.replace(/!\[(.*?)\]\((.*?)\)/gim, "<img alt='$1' src='$2' />")
.replace(/\[(.*?)\]\((.*?)\)/gim, "<a href='$2'>$1</a>")
.replace(/\n$/gim, '<br />')
return htmlText;
}
function preview() {
var editor = document.getElementById("markdown-input");
var viewer = document.getElementById("markdown-output");
viewer.innerHTML = parseMarkdown(editor.value);
}
效果如下: 以上代码中对无序列表只是非常简单的处理,正式的解析方法要稍微麻烦一些,本例仅是一个非常简单的例子,所以暂时不列出。
|