最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript實(shí)現(xiàn)簡單的Markdown語法解析器

 更新時間:2023年03月22日 09:22:24   作者:TANKING  
Markdown 是一種輕量級標(biāo)記語言, 它允許人們使用易讀易寫的純文本格式編寫文檔,然后轉(zhuǎn)換成有效的 XHTML(或者HTML)文檔。本文將利用JavaScript實(shí)現(xiàn)簡單的Markdown語法解析器,感興趣的可以了解一下

什么是markdown

Markdown 是一種輕量級標(biāo)記語言,創(chuàng)始人為約翰·格魯伯(John Gruber)。 它允許人們使用易讀易寫的純文本格式編寫文檔,然后轉(zhuǎn)換成有效的 XHTML(或者HTML)文檔。這種語言吸收了很多在電子郵件中已有的純文本標(biāo)記的特性。

由于 Markdown 的輕量化、易讀易寫特性,并且對于圖片,圖表、數(shù)學(xué)式都有支持,許多網(wǎng)站都廣泛使用 Markdown 來撰寫幫助文檔或是用于論壇上發(fā)表消息。 如 GitHub、Reddit、Diaspora、Stack ExchangeOpenStreetMap 、SourceForge、簡書等,甚至還能被使用來撰寫電子書?,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)一個簡單的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">這里會實(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í)時解析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)起來非常簡單,就是通過正則替換預(yù)定的字符來實(shí)現(xiàn)HTML的輸出。

demo

到此這篇關(guān)于JavaScript實(shí)現(xiàn)簡單的Markdown語法解析器的文章就介紹到這了,更多相關(guān)JavaScript Markdown語法解析器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript 是什么意思

    JavaScript 是什么意思

    javascript一種由Netscape的LiveScript發(fā)展而來的腳本語言,它提高與Java的兼容性。JavaScript采用HTML頁作為其接口。很多朋友問js是什么意思?下面小編通過分享本教程給大家解答下,感興趣的朋友參考下
    2016-09-09
  • Javascript json object 與string 相互轉(zhuǎn)換的簡單實(shí)現(xiàn)

    Javascript json object 與string 相互轉(zhuǎn)換的簡單實(shí)現(xiàn)

    下面小編就為大家?guī)硪黄狫avascript json object 與string 相互轉(zhuǎn)換的簡單實(shí)現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • JavaScript 動態(tài)三角函數(shù)實(shí)例詳解

    JavaScript 動態(tài)三角函數(shù)實(shí)例詳解

    本文通過實(shí)例代碼給大家實(shí)例講解了javascript動態(tài)三角函數(shù)知識,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2017-01-01
  • IE下Ajax緩存問題的快速解決方法(get方式)

    IE下Ajax緩存問題的快速解決方法(get方式)

    IE下Ajax緩存問題的快速解決方法(get方式)。網(wǎng)上搜了很多解決方案,一大把,下面是我認(rèn)為比較全面的解決方案。主要分為客戶端解決和服務(wù)端解決
    2014-01-01
  • canvas繪制愛心的幾種方法總結(jié)(推薦)

    canvas繪制愛心的幾種方法總結(jié)(推薦)

    下面小編就為大家?guī)硪黄猚anvas繪制愛心的幾種方法總結(jié)(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • javascript與webservice的通信實(shí)現(xiàn)代碼

    javascript與webservice的通信實(shí)現(xiàn)代碼

    關(guān)于javascript與webservice的通信,從理論上來說實(shí)現(xiàn)應(yīng)該不難,主要是將服務(wù)器端的xml數(shù)據(jù)進(jìn)行一個簡單的處理然后以一種適當(dāng)?shù)男问秸宫F(xiàn)成來。
    2010-12-12
  • JS中console對象內(nèi)部提供調(diào)試方法示例詳解

    JS中console對象內(nèi)部提供調(diào)試方法示例詳解

    本文介紹了JavaScript中`console`對象提供的多種調(diào)試方法,包括`log`、`debug`、`dir`、`table`、`clear`、`group`、`groupEnd`、`time`和`timeEnd`,每種方法都有其特定的用途,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • php 修改密碼實(shí)現(xiàn)代碼

    php 修改密碼實(shí)現(xiàn)代碼

    這篇文章主要介紹了php 修改密碼實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 基于Cookie常用操作以及屬性介紹

    基于Cookie常用操作以及屬性介紹

    下面小編就為大家?guī)硪黄贑ookie常用操作以及屬性介紹。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 低代碼從0到1創(chuàng)建小程序項(xiàng)目詳解流程

    低代碼從0到1創(chuàng)建小程序項(xiàng)目詳解流程

    低代碼作為開發(fā)工具類的產(chǎn)品,需要有從0到1體系化的教程才可以,而且還得有教師進(jìn)行輔助。否則,學(xué)習(xí)低代碼是有難度的,入門很難。因?yàn)榇蠹伊?xí)慣了用代碼編程,一下子過度到可視化編程,有一個思路上的轉(zhuǎn)變
    2022-08-08

最新評論

曲松县| 宜都市| 上栗县| 策勒县| 武乡县| 静乐县| 浪卡子县| 察雅县| 仁怀市| 鸡东县| 邯郸县| 巩义市| 宁阳县| 同江市| 新津县| 太和县| 宝应县| 化州市| 济阳县| 修武县| 安顺市| 江山市| 宁安市| 华阴市| 连云港市| 平南县| 宁蒗| 梓潼县| 盱眙县| 泾川县| 新野县| 中牟县| 昌图县| 班戈县| 宝丰县| 肇东市| 达尔| 阿城市| 福泉市| 格尔木市| 滨州市|