marked学习笔记

正则处理解析

1. 标题——heading

/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/
首先忽略标题开始时的空格:^ *
然后是匹配1到6次的#号:(#{1,6})
忽略#到文本的空格之后,不接受换行符为止:*([^\n]+?)
或者显式地指定标题结尾:*#*
再对全局非获取匹配换行符:*(?:\n+|$)
非获取匹配——定义与运算符一起使用的子表达式
老式语法中head也有文本后跟两个等号的:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/

2 分割线——hr

/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/
任意数量的_,-,*都可以产生分割线
头部可以有0-3数量的空格

3. 段落

/^([^\n]+(?:\n?(?!hr|heading| {0,3}>|tag)[^\n]+)+)/
tag是让marked支持直接解析html标签,其语法如下:

block._tag = '(?!(?:'
  + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'
  + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'
  + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b';

然而轻度的markdown使用并不需要这个,因此可以将段落继续简化为:
/^([^\n]+(?:\n?(?!hr|heading| {0,3}>)[^\n]+)+)/
其中包含标题,分割线,应用等。

4. 引用——blockquote

/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/
理论上引用可以无限嵌套

你可能感兴趣的:(marked学习笔记)