marked學(xué)習(xí)筆記

正則處理解析

1. 標題——heading

/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/
首先忽略標題開始時的空格:^ *
然后是匹配1到6次的#號:(#{1,6})
忽略#到文本的空格之后,不接受換行符為止:*([^\n]+?)
或者顯式地指定標題結(jié)尾:*#*
再對全局非獲取匹配換行符:*(?:\n+|$)
非獲取匹配——定義與運算符一起使用的子表達式
老式語法中head也有文本后跟兩個等號的:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/

2 分割線——hr

/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/
任意數(shù)量的_,-,*都可以產(chǎn)生分割線
頭部可以有0-3數(shù)量的空格

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使用并不需要這個,因此可以將段落繼續(xù)簡化為:
/^([^\n]+(?:\n?(?!hr|heading| {0,3}>)[^\n]+)+)/
其中包含標題,分割線,應(yīng)用等。

4. 引用——blockquote

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容