成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

正則表達(dá)解析 Markdown 語法

chaosx110 / 3534人閱讀

摘要:鏈接在語法中鏈接的表示形式為鏈接。。代表出現(xiàn)次或者無限次非貪婪模式讓正則表達(dá)式盡可能少的匹配,也就是說一旦匹配成功匹配不再繼續(xù)嘗試,就是非貪婪模式。斜體表示以一個(gè)或者開頭并結(jié)尾表示規(guī)則和第一個(gè)集合相同,中間包含個(gè)或多個(gè)字符的字符串。

轉(zhuǎn)載請注明出處

原文連接 http://blog.huanghanlian.com/article/5c80b4176f8b011040530140

文章起源

源于本博客開發(fā)實(shí)現(xiàn)需要

在首頁列表需要對文字進(jìn)行截取,需要截取第一張Markdown 語法的圖片url。

在文章詳情頁以及關(guān)于文章展示的頁面。需要對文章內(nèi)容進(jìn)行截取。填充headdescription。利于seo優(yōu)化

Markdown 是一種可以使用普通文本編輯器編寫的標(biāo)記語言,通過簡單的標(biāo)記語法,它可以使普通文本內(nèi)容具有一定的格式。

真實(shí)場景以及功能需求

文章編寫

文章列表預(yù)覽

頭部描述截取

需要做的事情是將文章Markdown 語法的字符串,對特定的語句進(jìn)行過濾。只顯示文章正文部分

實(shí)現(xiàn)場景

文章編寫存入數(shù)據(jù)庫是字符串類型

在訪問某篇文章后臺會(huì)去數(shù)據(jù)庫中取對應(yīng)的文章數(shù)據(jù)。
然后通過匹配將Markdown 語法的字符串轉(zhuǎn)義成html元素字符渲染輸出

"# 一級標(biāo)題
## 二級標(biāo)題
##### 五級標(biāo)題
- 列表第一項(xiàng)
- 列表第二項(xiàng)
1. 有序列表第一項(xiàng)
2. 有序列表第
二項(xiàng)
[標(biāo)題](鏈接地址)
![圖片描述](圖片鏈接地址)
*斜體*
**粗體**
> 引用段落
```
代碼塊
```"

現(xiàn)在需要做的是將這些字符去掉不想要的,提取內(nèi)容部分

正則表達(dá)式規(guī)則

在使用正則表達(dá)式解析 Markdown 語法之前,我們要先對正則表達(dá)式的規(guī)則有一個(gè)基本的認(rèn)識,下面我整理了一張正則表達(dá)式語法對照表。

正則表達(dá)式預(yù)定義類:

字符 含義
. 除了回車符和換行符之外的所有字符,等價(jià)于1
d 數(shù)字字符,等價(jià)于[0-9] digit
D 非數(shù)字字符,等價(jià)于2
s 空白符,等價(jià)于[tnx0Bfr] space
S 非空白符,等價(jià)于3
w 單詞字符(字母,數(shù)字,下劃線),等價(jià)于[a-zA-Z_0-9] word
W 非單詞字符,等價(jià)于4

邊界

字符 含義
^ 以xxx開始
$ 以xxx結(jié)束
b 單詞邊界
B 非單詞邊界

量詞

字符 含義
? 出現(xiàn)零次或一次(最多出現(xiàn)一次)
+ 出現(xiàn)一次或多次(至少出現(xiàn)一次)
* 出現(xiàn)零次或多次(任意次)
{n} 出現(xiàn)n次
{n,m} 出現(xiàn)n到m次
{n,} 至少出現(xiàn)n次
正則表達(dá)式解析 Markdown 語法

Markdown 語法包括標(biāo)題、圖片、鏈接、引用塊、列表、粗體、斜體等,下面是解析這些語法的正則表達(dá)式和簡單說明:

標(biāo)題(表示以一個(gè)或多個(gè)“#”開頭的字符串,并且“#”之后有0個(gè)或以上的字符,如:“### 三級標(biāo)題”)。

^(#+)(.*)

鏈接 (在 Markdown 語法中鏈接的表示形式為 [鏈接](URL)。)。

/[[sS]*?]([sS]*?)/g

解釋:
匹配 [符 開始
緊接著[sS]范圍類 空白符或者非空白符都可以的類。
*代表出現(xiàn)0次或者無限次
?非貪婪模式
讓正則表達(dá)式盡可能少的匹配,也就是說一旦匹配成功匹配不再繼續(xù)嘗試,就是非貪婪模式。
做法很簡單,在量詞后面加上?即可。

斜體(表示以一個(gè) * 或者 _ 開頭并結(jié)尾(1表示規(guī)則和第一個(gè)集合相同),中間包含0個(gè)或多個(gè)字符的字符串)。

(*|_)(.*?)1

圖片(部分地方同鏈接)

![[^]]+]([^)]+)

粗體(同斜體)

(**|__)(.*?)1

刪除線(刪除線)

~~(.*?)~~

引用塊

(>|>)(.*)

內(nèi)聯(lián)代碼塊

`{1,2}[^`](.*?)`{1,2}

分割線

^-+$

`包圍的代碼塊

```([sS]*?)```[s]?

無序列表

^[s]*[-*+] +(.*)

有序列表

^[s]*[0-9]+.(.*)
function abstractFn(res){
  if(!res){
    return "";
  }else{
    var str=res.replace(/(**|__)(.*?)(**|__)/g,"")          //全局匹配內(nèi)粗體
    .replace(/![[sS]*?]([sS]*?)/g,"")                  //全局匹配圖片
    .replace(/[[sS]*?]([sS]*?)/g,"")                    //全局匹配連接
    .replace(//g,"")                                 //全局匹配內(nèi)html標(biāo)簽
    .replace(/(*)(.*?)(*)/g,"")                               //全局匹配內(nèi)聯(lián)代碼塊
    .replace(/`{1,2}[^`](.*?)`{1,2}/g,"")                       //全局匹配內(nèi)聯(lián)代碼塊
    .replace(/```([sS]*?)```[s]*/g,"")                       //全局匹配代碼塊
    .replace(/~~(.*?)~~/g,"")                               //全局匹配刪除線
    .replace(/[s]*[-*+]+(.*)/g,"")                           //全局匹配無序列表
    .replace(/[s]*[0-9]+.(.*)/g,"")                           //全局匹配有序列表
    .replace(/(#+)(.*)/g,"")                                    //全局匹配標(biāo)題
    .replace(/(>+)(.*)/g,"")                                    //全局匹配摘要
    .replace(/
/g,"")                                        //全局匹配換行
    .replace(/
/g,"")                                          //全局匹配換行
    .replace(/s/g,"")                                          //全局匹配空字符;
    return str.slice(0,155);
  }
}
  • rn ?

  • 0-9 ?

  • tbx0Bfr ?

  • a-zA-Z_0-9 ?

  • 文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/102478.html

    相關(guān)文章

    • 正則表達(dá)式之簡易markdown文件解析

      摘要:使用正則表達(dá)式也可以寫一個(gè)簡單的解析器一般的表達(dá)式是這樣這是一個(gè)表達(dá)式這是一個(gè)表達(dá)式一行一個(gè)表達(dá)式,所以可以使用將內(nèi)容分割為一個(gè)數(shù)組,數(shù)組的都每一項(xiàng)都是一個(gè)表達(dá)式然后再對每一行表達(dá)式進(jìn)行解析,假如匹配到了如下表達(dá)式這是一個(gè)表達(dá)式這是一個(gè)表達(dá) 使用正則表達(dá)式也可以寫一個(gè)簡單的markdown解析器一般的markdown表達(dá)式是這樣 # 這是一個(gè)markdown表達(dá)式 ## 這是一個(gè)mar...

      darryrzhong 評論0 收藏0
    • marked.js使用雜記-markdown擴(kuò)展語法

      摘要:如何擴(kuò)展語法想要擴(kuò)展語法,也就需要深入了解的工作機(jī)制。的工作機(jī)制創(chuàng)建詞法解析器實(shí)例將字符串解析成是官方文檔的叫法,按照我的理解應(yīng)該是節(jié)點(diǎn)接下來創(chuàng)建解析器實(shí)例調(diào)用來解析,生成字符串到這里,的工作機(jī)制就完了。 請移步到我的Blog,獲得更好的閱讀體驗(yàn)!本文的鏈接請點(diǎn)這里 起因 我的博客系統(tǒng)的文章是直接使用gitbook保存的markdown文檔,后端使用marked.js來解析markd...

      huashiou 評論0 收藏0
    • 一次性搞懂JavaScript正則表達(dá)式之引擎

      摘要:總的來說,可以稱為文本主導(dǎo)的正則引擎,可以稱為表達(dá)式主導(dǎo)的正則引擎。首先,正則表達(dá)式在計(jì)算機(jī)看來只是一串符號,正則引擎首先肯定要解析它。精通正則表達(dá)式書中說引擎不支持非貪婪模式,很明顯不是引擎。正則表達(dá)式中可以商榷的部分就叫做備選狀態(tài)。 本文是『horseshoe·Regex專題』系列文章之一,后續(xù)會(huì)有更多專題推出GitHub地址:https://github.com/veedrin/...

      hlcc 評論0 收藏0
    • 12行代碼實(shí)現(xiàn)一個(gè)Web版Markdown編輯器: 實(shí)時(shí)預(yù)覽

      摘要:首先,我承認(rèn)標(biāo)題黨的嫌疑是逃不掉的了但是,諸君請繼續(xù)看下去,就會(huì)發(fā)現(xiàn)還是有干貨的源碼寫這個(gè)編輯器的難點(diǎn)有兩個(gè)對文本進(jìn)行語法的解析實(shí)時(shí)檢測頁面文本變化針對,我在上找到了,看就能很快地上手針對,我選擇的是,因?yàn)槲铱粗辛怂碾p向綁定特性當(dāng)然數(shù)據(jù)和 首先,我承認(rèn)標(biāo)題黨的嫌疑是逃不掉的了...但是,諸君請繼續(xù)看下去,就會(huì)發(fā)現(xiàn)還是有干貨的 源碼:https://github.com/shuiRo...

      Mertens 評論0 收藏0
    • 12行代碼實(shí)現(xiàn)一個(gè)Web版Markdown編輯器: 實(shí)時(shí)預(yù)覽

      摘要:首先,我承認(rèn)標(biāo)題黨的嫌疑是逃不掉的了但是,諸君請繼續(xù)看下去,就會(huì)發(fā)現(xiàn)還是有干貨的源碼寫這個(gè)編輯器的難點(diǎn)有兩個(gè)對文本進(jìn)行語法的解析實(shí)時(shí)檢測頁面文本變化針對,我在上找到了,看就能很快地上手針對,我選擇的是,因?yàn)槲铱粗辛怂碾p向綁定特性當(dāng)然數(shù)據(jù)和 首先,我承認(rèn)標(biāo)題黨的嫌疑是逃不掉的了...但是,諸君請繼續(xù)看下去,就會(huì)發(fā)現(xiàn)還是有干貨的 源碼:https://github.com/shuiRo...

      makeFoxPlay 評論0 收藏0

    發(fā)表評論

    0條評論

    chaosx110

    |高級講師

    TA的文章

    閱讀更多
    最新活動(dòng)
    閱讀需要支付1元查看
    <