我是不是弱爆了,打算自己动手写个 markdown 渲染器,望而却步了 。。。

2017-10-22 10:40:28 +08:00
 ericling

用了不少 markdown 的渲染器,都不怎么满意,然后想自己去动手写个,找了个参照来看源码: https://github.com/StackExchange/pagedown

主要就是这三个文件:

Markdown.Converter.js
Markdown.Editor.js
Markdown.Sanitizer.js

打开源码一看,要写这么复杂的正则,考虑这么多种情况下的渲染,就感觉自己弱爆了,根本没敢动手(=_=!!)。知道就算是强行写出来了,也是漏洞百出,没有实用价值。

学 js 的同学,有多少小伙伴,自觉达到了能写出这个级别轮子的 js 水平哇?

8333 次点击
所在节点    JavaScript
32 条回复
nl101531
2017-10-22 10:44:14 +08:00
规则是有点复杂。
cyr1l
2017-10-22 10:55:22 +08:00
可以首先明确你对现在的渲染器哪里不满意,然后对已有的渲染器 fork 并改进。不一定要上来就造新轮子。
tlday
2017-10-22 10:55:27 +08:00
复杂的正则问题不大,太多边际情况在没有经验的时候,以出现一个改一个,不断迭代的方法就好。做这种东西关键需要毅力。
CasualYours
2017-10-22 11:09:01 +08:00
你可以先从简单入手嘛,比如先写 n 级标题的正则。
duan602728596
2017-10-22 11:22:00 +08:00
你可以试一试,在写的过程中,肯定会碰到很多问题需要解决,即使最后写不出来,在写的过程中也会有收获。如果写出来了,你就会想,原来这东西是这么实现的啊
lxy
2017-10-22 11:33:05 +08:00
用一整屏的注释解释了两条正则……
text = text.replace(/(?=[^\r][*_]|[*_])(^|(?=\W__|(?!\*)[\W_]\*\*|\w\*\*\w)[^\r])(\*\*|__)(?!\2)(?=\S)((?:|[^\r]*?(?!\2)[^\r])(?=\S_|\w|\S\*\*(?:[\W_]|$)).)(?=__(?:\W|$)|\*\*(?:[^*]|$))\2/g, "$1<strong>$3</strong>");
text = text.replace(/(?=[^\r][*_]|[*_])(^|(?=\W_|(?!\*)(?:[\W_]\*|\D\*(?=\w)\D))[^\r])(\*|_)(?!\2\2\2)(?=\S)((?:(?!\2)[^\r])*?(?=[^\s_]_|(?=\w)\D\*\D|[^\s*]\*(?:[\W_]|$)).)(?=_(?:\W|$)|\*(?:[^*]|$))\2/g, "$1<em>$3</em>");
BBCCBB
2017-10-22 11:33:18 +08:00
fork+修改 + 1, 我也写不出来,哈哈
anuan
2017-10-22 11:36:21 +08:00
搭车求
推荐一款好用的 web 端 markdow 渲染库
loading
2017-10-22 12:05:09 +08:00
还好,你没进 wysiwyg,大公司大坑。
jtn007
2017-10-22 12:09:08 +08:00
年少的我曾经也有这种想法。。。

js 的 markdown 渲染库的话推荐这个
https://github.com/chjj/marked
然后搭配使用 github 的 md 的 css 式样
https://github.com/sindresorhus/github-markdown-css

基本就能达到不错的效果了,最近在搭博客,正好在找这些东西
hantsy
2017-10-22 12:11:14 +08:00
这些只是 Render 而已,还不是 IDE 语法分析。
hantsy
2017-10-22 12:14:05 +08:00
可视化编辑: https://simplemde.com/
Render 还是喜欢 Marked
ericgui
2017-10-22 12:23:48 +08:00
@cyr1l 已感谢

其实这个方法论,不仅适用于这个 markdown 的轮子
也适用于其他任何轮子
不一定要从头开始
可以就某一点做一些改变
日拱一卒嘛
dbw9580
2017-10-22 12:31:58 +08:00
这种事情 lexer 比正则好用吧
tamlok
2017-10-22 12:38:43 +08:00
我是对现在的笔记软件和 md 编辑器不满意,然后从头撸了一个 md 笔记软件。其实,做开了后也不是很复杂,就是很繁琐而已。VNote 默认使用的是 markdown-it 引擎来渲染,效果挺不错!


https://github.com/tamlok/vnote/
tamlok
2017-10-22 12:39:54 +08:00
@anuan 试试 markdown-it 吧,VNote 默认引擎,感觉挺不错的,比 marked 要规范不少。
fy
2017-10-22 13:07:58 +08:00
@tamlok #16 marked 没啥明显的不规范吧。

其实我觉更缺少的是编辑器,simplemde 后继无人
qdwang
2017-10-22 13:20:27 +08:00
小兄弟,你可以不用正则,换个方式来实现,就不用感到害怕了
tamlok
2017-10-22 13:35:57 +08:00
@fy marked 基本不怎么维护了,很多 bug 都没 fix,还是有一些不规范的,之前开发 VNote 的时候遇到过一些,一时记不起来。编辑器试试 VNote 吧😁😁😁
pinsily
2017-10-22 13:40:25 +08:00
哈哈,也有这个想法,typecho 的文章样式还是有点不习惯的,想着还是改改算了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/399618

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX