「Javascript」解析markdown为html——链接和代码块篇

文章介绍了如何使用JavaScript解析Markdown中的图片、超链接和代码块,将其转换为HTML。通过正则表达式匹配和替换,实现了图片和超链接的解析,并处理了代码块的展示,包括转义特殊字符和添加代码高亮。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

「Javascript」解析markdown为html——链接和代码块篇

1 前言

markdown是一种十分优秀的标记语言,用来记录笔记十分方便,可以专注于内容,尽可能少地把精力放在样式调整上。在markdown中插入图片、超链接和代码块比富文本编辑方便不少。在这里记录一下将markdown的链接和代码块解析为html的JavaScript方法。

2 分析

2.1 图片

markdown:

![图片描述](图片链接)

在markdown中,一般的图片格式以"!“开头,”[ ]“内包裹对图片的描述,”( )"内包裹图片链接。除此之外,如果希望修改图片样式,可以使用html格式的img标签插入图片。

html:

<img src="图片链接" alt="图片描述">

2.2 超链接

markdown:

[文字描述](网址)

html:

<a href="网址">文字描述</a>

2.3 代码块

markdown:

```cpp
#include<iostream>
using namespace std;
int main(){
	return 0;
}
```

html:

<pre><code>#include&lt;iostream&gt;
using&nbsp;namespace&nbsp;std;
int&nbsp;main(){
&emsp;&emsp;return&nbsp;0;
}</code></pre>

在html中无法正常显示">", "<"等符号,需要使用转义字符,几个常用的符号:

符号转义
>&gt;
<&lt;
"&quot;

3 代码

3.1 图片和超链接

function parseMdlink(str) {
	var links = str.match(/!?\[.+?\]\(https?:\/\/.+\)/g);// 解析出图片和超链接文本
	if (links != null) {
		for (var i = 0; i < links.length; i++) {
			var text_link = links[i].match(/[^!\[\(\]\)]+/g);//提取文字和链接
			if (links[i][0] == "!") { str = str.replace(links[i], "<img src=\"" + text_link[1] + "\" loading=\"lazy\" alt=\"" + text_link[0] + "\" />"); }//解析图片
			else { str = str.replace(links[i], "<a href=\"" + text_link[1] + "\">" + text_link[0] + "</a>"); }//解析超链接
		}
	}
	return str;
}

3.2 代码块

function parseMdcode(block){
    var block_html=""//记录代码块的html文本
    var codetype = block.split("\n")[0].replace("```", "");	/* 代码语言类型 */
	if (codetype == "") { codetype = "less"; }//没有声明格式的代码块
	var code = block.replace(/```.*\n/g, "").replace(/```/g, "");	/* 代码块本体 */
	var line_num = code.split("\n").length;	/* 代码的行数 */
	block_html += "<pre><code class=\"language-" + codetype + "\">" + replaceSpecialsymbol(code) + "</code></pre>";
}

其中用到了函数replaceSpecialsymbol();这是用于将特殊符号转为转义字符的函数:

function replaceSpecialsymbol(string) {
	return string.replace(/\&/g, "&amp").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\"/g, "&quot;").replace(/\x20/g, "&ensp;").replace(/\t/g, "&ensp;&ensp;&ensp;&ensp;");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武的阶乘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值