
用了不少 markdown 的渲染器,都不怎么满意,然后想自己去动手写个,找了个参照来看源码: https://github.com/StackExchange/pagedown
主要就是这三个文件:
Markdown.Converter.js Markdown.Editor.js Markdown.Sanitizer.js 打开源码一看,要写这么复杂的正则,考虑这么多种情况下的渲染,就感觉自己弱爆了,根本没敢动手(=_=!!)。知道就算是强行写出来了,也是漏洞百出,没有实用价值。
学 js 的同学,有多少小伙伴,自觉达到了能写出这个级别轮子的 js 水平哇?
1 nl101531 2017-10-22 10:44:14 +08:00 via Android 规则是有点复杂。 |
2 cyr1l 2017-10-22 10:55:22 +08:00 via iPhone 可以首先明确你对现在的渲染器哪里不满意,然后对已有的渲染器 fork 并改进。不一定要上来就造新轮子。 |
3 tlday 2017-10-22 10:55:27 +08:00 via Android 复杂的正则问题不大,太多边际情况在没有经验的时候,以出现一个改一个,不断迭代的方法就好。做这种东西关键需要毅力。 |
4 CasualYours 2017-10-22 11:09:01 +08:00 你可以先从简单入手嘛,比如先写 n 级标题的正则。 |
5 duan602728596 2017-10-22 11:22:00 +08:00 via iPhone 你可以试一试,在写的过程中,肯定会碰到很多问题需要解决,即使最后写不出来,在写的过程中也会有收获。如果写出来了,你就会想,原来这东西是这么实现的啊 |
6 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>"); |
7 BBCCBB 2017-10-22 11:33:18 +08:00 fork+修改 + 1, 我也写不出来,哈哈 |
8 anuan 2017-10-22 11:36:21 +08:00 搭车求 推荐一款好用的 web 端 markdow 渲染库 |
9 loading 2017-10-22 12:05:09 +08:00 via Android 还好,你没进 wysiwyg,大公司大坑。 |
10 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 基本就能达到不错的效果了,最近在搭博客,正好在找这些东西 |
11 hantsy 2017-10-22 12:11:14 +08:00 这些只是 Render 而已,还不是 IDE 语法分析。 |
12 hantsy 2017-10-22 12:14:05 +08:00 可视化编辑: https://simplemde.com/ Render 还是喜欢 Marked |
13 ericgui 2017-10-22 12:23:48 +08:00 |
14 dbw9580 2017-10-22 12:31:58 +08:00 via Android 这种事情 lexer 比正则好用吧 |
15 tamlok 2017-10-22 12:38:43 +08:00 via Android 我是对现在的笔记软件和 md 编辑器不满意,然后从头撸了一个 md 笔记软件。其实,做开了后也不是很复杂,就是很繁琐而已。VNote 默认使用的是 markdown-it 引擎来渲染,效果挺不错! https://github.com/tamlok/vnote/ |
16 tamlok 2017-10-22 12:39:54 +08:00 via Android @anuan 试试 markdown-it 吧,VNote 默认引擎,感觉挺不错的,比 marked 要规范不少。 |
18 qdwang 2017-10-22 13:20:27 +08:00 小兄弟,你可以不用正则,换个方式来实现,就不用感到害怕了 |
19 tamlok 2017-10-22 13:35:57 +08:00 via Android @fy marked 基本不怎么维护了,很多 bug 都没 fix,还是有一些不规范的,之前开发 VNote 的时候遇到过一些,一时记不起来。编辑器试试 VNote 吧 |
20 pinsily 2017-10-22 13:40:25 +08:00 哈哈,也有这个想法,typecho 的文章样式还是有点不习惯的,想着还是改改算了 |
21 jadeity 2017-10-22 13:44:06 +08:00 错了又能怎么样,试着来呗,他们也未必是一口气写出来的。 |
23 ChopMoun 2017-10-22 13:48:31 +08:00 我也能看看,完全写不出来。。。 |
24 mcfog 2017-10-22 13:55:12 +08:00 满屏的正则是写不好 markdown 渲染的,好好学编译原理吧少年 |
25 sexrobot 2017-10-22 17:08:34 +08:00 惊不惊喜,意不意外 |
26 hanzichi 2017-10-22 17:39:39 +08:00 我之前也想着看看 segmentfault 的 markdown 编辑器 hyperdown,看了之后发现完全看不下去 ... |
28 Biwood 2017-10-22 17:45:10 +08:00 每个人的实现方式不一样,你要实现某个功能最好是按照自己的思路去实现,都是为了实现某个功能而导致逻辑复杂的,而不是为了复杂而复杂。 |
29 boboliu 2017-10-22 17:48:28 +08:00 via Android 我本来也想写,回来一看已经有现成的轮子可用了,需求足够,然后。。。 |
30 srlp 2017-10-22 19:17:14 +08:00 |
31 anuan 2017-10-23 08:32:17 +08:00 感谢 @jtn007 @tamlok 搜到一个博客 比较了 Marked CommonMark Markdown-it Remarkable Showdown http://tools.42du.cn/p/markdown-parser Marked 够用且比较小 选他了 |
32 Mutoo 2017-10-23 09:38:24 +08:00 把 Markdown 的语法规则写出来,然后用 Nearley.js 生成解析器,再用这个解析器去渲染 html https://nearley.js.org 另附 nearley 官网上提供了一个相关的轮子: https://github.com/bobbybee/uPresent/blob/master/uPresent.ne |