JavaScript實(shí)現(xiàn)簡(jiǎn)單的Markdown語法解析器
什么是markdown
Markdown
是一種輕量級(jí)標(biāo)記語言,創(chuàng)始人為約翰·格魯伯(John Gruber)。 它允許人們使用易讀易寫的純文本格式編寫文檔,然后轉(zhuǎn)換成有效的 XHTML(或者HTML)文檔。這種語言吸收了很多在電子郵件中已有的純文本標(biāo)記的特性。
由于 Markdown
的輕量化、易讀易寫特性,并且對(duì)于圖片,圖表、數(shù)學(xué)式都有支持,許多網(wǎng)站都廣泛使用 Markdown
來撰寫幫助文檔或是用于論壇上發(fā)表消息。 如 GitHub
、Reddit
、Diaspora
、Stack Exchange
、OpenStreetMap
、SourceForge
、簡(jiǎn)書等,甚至還能被使用來撰寫電子書?,F(xiàn)在我們所看的 segmentfault
的編輯器也是支持markdown語法的!
上代碼
</!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8"> <script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script> <style> *{ padding: 0; margin: 0; font-family: system-ui,-apple-system,BlinkMacSystemFont,Helvetica Neue,PingFang SC,Hiragino Sans GB,Microsoft YaHei UI,Microsoft YaHei,Arial,sans-serif; } #app{ width: 810px; height: 400px; margin: 30px auto 0; padding: 20px 20px; background: #00965e; } #app .md-editor{ width: 400px; height: 400px; float: left; } #app .md-content{ width: 100%; height: 400px; outline: none; resize: none; padding: 10px 10px; font-size: 17px; border: none; background: #eee; } #app .md-html{ width: 400px; height: 400px; float: right; background: #eee; } #app code{ color: #666; padding: 2px 5px; background: #fff; border-radius: 5px; font-size: 14px; } </style> </head> <body> <h3 style="text-align: center;margin-top: 100px;">JavaScript實(shí)現(xiàn)一個(gè)簡(jiǎn)單的MarkDown語法解析器</h3> <div id="app"> <div class="md-editor"> <form> <textarea name="md-content" class="md-content" placeholder="在這里使用markdown語法編寫"></textarea> </form> </div> <div class="md-html">這里會(huì)實(shí)時(shí)顯示markdown語法的解析結(jié)果</div> </div> <script type="text/javascript"> // 解析markdown語法為html function markdownToHTML(markdownContent) { // 處理標(biāo)題 markdownContent = markdownContent.replace(/^#\s(.*)$/gm, '<h1>$1</h1>'); markdownContent = markdownContent.replace(/^##\s(.*)$/gm, '<h2>$1</h2>'); markdownContent = markdownContent.replace(/^###\s(.*)$/gm, '<h3>$1</h3>'); markdownContent = markdownContent.replace(/^####\s(.*)$/gm, '<h4>$1</h4>'); markdownContent = markdownContent.replace(/^#####\s(.*)$/gm, '<h5>$1</h5>'); markdownContent = markdownContent.replace(/^######\s(.*)$/gm, '<h6>$1</h6>'); // 處理加粗、斜體、刪除線 markdownContent = markdownContent.replace(/\*\*(.*)\*\*/gm, '<strong>$1</strong>'); markdownContent = markdownContent.replace(/__(.*)__/gm, '<strong>$1</strong>'); markdownContent = markdownContent.replace(/\*(.*)\*/gm, '<em>$1</em>'); markdownContent = markdownContent.replace(/_(.*)_/gm, '<em>$1</em>'); markdownContent = markdownContent.replace(/~~(.*)~~/gm, '<del>$1</del>'); // 處理鏈接和圖片 markdownContent = markdownContent.replace(/\[(.*?)\]\((.*?)\)/gm, '<a href="$2" rel="external nofollow" >$1</a>'); markdownContent = markdownContent.replace(/!\[(.*?)\]\((.*?)\)/gm, '<img src="$2" alt="$1">'); // 處理行內(nèi)代碼和代碼塊 markdownContent = markdownContent.replace(/`(.*?)`/gm, '<code>$1</code>'); markdownContent = markdownContent.replace(/```([\s\S]*?)```/gm, '<pre>$1</pre>'); // 處理換行 markdownContent = markdownContent.replace(/\n/g, "<br>"); return markdownContent; } // 實(shí)時(shí)解析markdown語法 $("#app .md-editor .md-content").bind("input propertychange",function(event){ let md_content = $('#app .md-editor .md-content').val(); $('#app .md-html').html(markdownToHTML(md_content)); }); </script> </body> </html>
實(shí)現(xiàn)原理
實(shí)現(xiàn)起來非常簡(jiǎn)單,就是通過正則替換預(yù)定的字符來實(shí)現(xiàn)HTML的輸出。
demo
到此這篇關(guān)于JavaScript實(shí)現(xiàn)簡(jiǎn)單的Markdown語法解析器的文章就介紹到這了,更多相關(guān)JavaScript Markdown語法解析器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS實(shí)現(xiàn)滑動(dòng)門效果的方法詳解
這篇文章主要介紹了JS實(shí)現(xiàn)滑動(dòng)門效果的方法,結(jié)合實(shí)例形式分析了滑動(dòng)門效果的實(shí)現(xiàn)原理、步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-12-12使用JavaScript實(shí)現(xiàn)一個(gè)靜態(tài)鏈表
這篇文章主要為大家詳細(xì)介紹了如何使用JavaScript實(shí)現(xiàn)一個(gè)靜態(tài)鏈表,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下2023-06-06JS實(shí)現(xiàn)在頁面隨時(shí)自定義背景顏色的方法
這篇文章主要介紹了JS實(shí)現(xiàn)在頁面隨時(shí)自定義背景顏色的方法,實(shí)例分析了javascript操作css樣式的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02Javascript Event事件中IE與標(biāo)準(zhǔn)DOM的比較
說是IE與DOM的比較,其實(shí)還是瀏覽器之間的比較,眾多的瀏覽器中,IE獨(dú)樹一幟,并且占有大部分用戶市場(chǎng),后來的標(biāo)準(zhǔn)DOM雖然不少優(yōu)點(diǎn)之處,但畢竟一般用戶不關(guān)心也不知道這些,代碼編寫過程中,往往需要兼顧多個(gè)瀏覽器。2010-04-04用幾道面試題來看JavaScript執(zhí)行機(jī)制
這篇文章主要介紹了JavaScript的執(zhí)行機(jī)制,對(duì)此感興趣的同學(xué),可以參考下2021-04-04JavaScript中你不得不知道的Promise高級(jí)用法分享
在JavaScript中,Promise是一種解決異步編程問題的重要方式,本文主要來和大家探討一下23個(gè)Promise的高級(jí)用法,每一個(gè)都在JavaScript的海洋中航行,讓開發(fā)者們能夠以更高效、優(yōu)雅的方式處理異步操作,希望對(duì)大就有所幫助2023-12-12js 獲取坐標(biāo) 通過JS得到當(dāng)前焦點(diǎn)(鼠標(biāo))的坐標(biāo)屬性
通過JS得到當(dāng)前焦點(diǎn)的坐標(biāo),如何實(shí)現(xiàn),接下來詳細(xì)介紹實(shí)現(xiàn)步驟,有需要的朋友可以參考下2013-01-01Layui之table中的radio在切換分頁時(shí)無法記住選中狀態(tài)的解決方法
今天小編就為大家分享一篇Layui之table中的radio在切換分頁時(shí)無法記住選中狀態(tài)的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09