摘要:鏈接在語(yǔ)法中鏈接的表示形式為鏈接。。代表出現(xiàn)次或者無(wú)限次非貪婪模式讓正則表達(dá)式盡可能少的匹配,也就是說(shuō)一旦匹配成功匹配不再繼續(xù)嘗試,就是非貪婪模式。斜體表示以一個(gè)或者開(kāi)頭并結(jié)尾表示規(guī)則和第一個(gè)集合相同,中間包含個(gè)或多個(gè)字符的字符串。
轉(zhuǎn)載請(qǐng)注明出處
原文連接 http://blog.huanghanlian.com/article/5c80b4176f8b011040530140
文章起源源于本博客開(kāi)發(fā)實(shí)現(xiàn)需要
在首頁(yè)列表需要對(duì)文字進(jìn)行截取,需要截取第一張Markdown 語(yǔ)法的圖片url。
在文章詳情頁(yè)以及關(guān)于文章展示的頁(yè)面。需要對(duì)文章內(nèi)容進(jìn)行截取。填充headdescription。利于seo優(yōu)化
Markdown 是一種可以使用普通文本編輯器編寫(xiě)的標(biāo)記語(yǔ)言,通過(guò)簡(jiǎn)單的標(biāo)記語(yǔ)法,它可以使普通文本內(nèi)容具有一定的格式。
真實(shí)場(chǎng)景以及功能需求
文章編寫(xiě)
文章列表預(yù)覽
頭部描述截取
需要做的事情是將文章Markdown 語(yǔ)法的字符串,對(duì)特定的語(yǔ)句進(jìn)行過(guò)濾。只顯示文章正文部分
實(shí)現(xiàn)場(chǎng)景文章編寫(xiě)存入數(shù)據(jù)庫(kù)是字符串類型
在訪問(wèn)某篇文章后臺(tái)會(huì)去數(shù)據(jù)庫(kù)中取對(duì)應(yīng)的文章數(shù)據(jù)。
然后通過(guò)匹配將Markdown 語(yǔ)法的字符串轉(zhuǎn)義成html元素字符渲染輸出
"# 一級(jí)標(biāo)題 ## 二級(jí)標(biāo)題 ##### 五級(jí)標(biāo)題 - 列表第一項(xiàng) - 列表第二項(xiàng) 1. 有序列表第一項(xiàng) 2. 有序列表第 二項(xiàng) [標(biāo)題](鏈接地址)  *斜體* **粗體** > 引用段落 ``` 代碼塊 ```"
現(xiàn)在需要做的是將這些字符去掉不想要的,提取內(nèi)容部分
正則表達(dá)式規(guī)則在使用正則表達(dá)式解析 Markdown 語(yǔ)法之前,我們要先對(duì)正則表達(dá)式的規(guī)則有一個(gè)基本的認(rèn)識(shí),下面我整理了一張正則表達(dá)式語(yǔ)法對(duì)照表。
正則表達(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開(kāi)始 |
$ | 以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次 |
Markdown 語(yǔ)法包括標(biāo)題、圖片、鏈接、引用塊、列表、粗體、斜體等,下面是解析這些語(yǔ)法的正則表達(dá)式和簡(jiǎn)單說(shuō)明:
標(biāo)題(表示以一個(gè)或多個(gè)“#”開(kāi)頭的字符串,并且“#”之后有0個(gè)或以上的字符,如:“### 三級(jí)標(biāo)題”)。
^(#+)(.*)
鏈接 (在 Markdown 語(yǔ)法中鏈接的表示形式為 [鏈接](URL)。)。
/[[sS]*?]([sS]*?)/g
解釋:
匹配 [符 開(kāi)始
緊接著[sS]范圍類 空白符或者非空白符都可以的類。
*代表出現(xiàn)0次或者無(wú)限次
?非貪婪模式
讓正則表達(dá)式盡可能少的匹配,也就是說(shuō)一旦匹配成功匹配不再繼續(xù)嘗試,就是非貪婪模式。
做法很簡(jiǎn)單,在量詞后面加上?即可。
斜體(表示以一個(gè) * 或者 _ 開(kāi)頭并結(jié)尾(1表示規(guī)則和第一個(gè)集合相同),中間包含0個(gè)或多個(gè)字符的字符串)。
(*|_)(.*?)1
圖片(部分地方同鏈接)
![[^]]+]([^)]+)
粗體(同斜體)
(**|__)(.*?)1
刪除線(刪除線)
~~(.*?)~~
引用塊
(>|>)(.*)
內(nèi)聯(lián)代碼塊
`{1,2}[^`](.*?)`{1,2}
分割線
^-+$
`包圍的代碼塊
```([sS]*?)```[s]?
無(wú)序列表
^[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,"") //全局匹配無(wú)序列表 .replace(/[s]*[0-9]+.(.*)/g,"") //全局匹配有序列表 .replace(/(#+)(.*)/g,"") //全局匹配標(biāo)題 .replace(/(>+)(.*)/g,"") //全局匹配摘要 .replace(/ /g,"") //全局匹配換行 .replace(/ /g,"") //全局匹配換行 .replace(/s/g,"") //全局匹配空字符; return str.slice(0,155); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/102478.html
摘要:使用正則表達(dá)式也可以寫(xiě)一個(gè)簡(jiǎn)單的解析器一般的表達(dá)式是這樣這是一個(gè)表達(dá)式這是一個(gè)表達(dá)式一行一個(gè)表達(dá)式,所以可以使用將內(nèi)容分割為一個(gè)數(shù)組,數(shù)組的都每一項(xiàng)都是一個(gè)表達(dá)式然后再對(duì)每一行表達(dá)式進(jìn)行解析,假如匹配到了如下表達(dá)式這是一個(gè)表達(dá)式這是一個(gè)表達(dá) 使用正則表達(dá)式也可以寫(xiě)一個(gè)簡(jiǎn)單的markdown解析器一般的markdown表達(dá)式是這樣 # 這是一個(gè)markdown表達(dá)式 ## 這是一個(gè)mar...
摘要:如何擴(kuò)展語(yǔ)法想要擴(kuò)展語(yǔ)法,也就需要深入了解的工作機(jī)制。的工作機(jī)制創(chuàng)建詞法解析器實(shí)例將字符串解析成是官方文檔的叫法,按照我的理解應(yīng)該是節(jié)點(diǎn)接下來(lái)創(chuàng)建解析器實(shí)例調(diào)用來(lái)解析,生成字符串到這里,的工作機(jī)制就完了。 請(qǐng)移步到我的Blog,獲得更好的閱讀體驗(yàn)!本文的鏈接請(qǐng)點(diǎn)這里 起因 我的博客系統(tǒng)的文章是直接使用gitbook保存的markdown文檔,后端使用marked.js來(lái)解析markd...
摘要:總的來(lái)說(shuō),可以稱為文本主導(dǎo)的正則引擎,可以稱為表達(dá)式主導(dǎo)的正則引擎。首先,正則表達(dá)式在計(jì)算機(jī)看來(lái)只是一串符號(hào),正則引擎首先肯定要解析它。精通正則表達(dá)式書(shū)中說(shuō)引擎不支持非貪婪模式,很明顯不是引擎。正則表達(dá)式中可以商榷的部分就叫做備選狀態(tài)。 本文是『horseshoe·Regex專題』系列文章之一,后續(xù)會(huì)有更多專題推出GitHub地址:https://github.com/veedrin/...
摘要:首先,我承認(rèn)標(biāo)題黨的嫌疑是逃不掉的了但是,諸君請(qǐng)繼續(xù)看下去,就會(huì)發(fā)現(xiàn)還是有干貨的源碼寫(xiě)這個(gè)編輯器的難點(diǎn)有兩個(gè)對(duì)文本進(jìn)行語(yǔ)法的解析實(shí)時(shí)檢測(cè)頁(yè)面文本變化針對(duì),我在上找到了,看就能很快地上手針對(duì),我選擇的是,因?yàn)槲铱粗辛怂碾p向綁定特性當(dāng)然數(shù)據(jù)和 首先,我承認(rèn)標(biāo)題黨的嫌疑是逃不掉的了...但是,諸君請(qǐng)繼續(xù)看下去,就會(huì)發(fā)現(xiàn)還是有干貨的 源碼:https://github.com/shuiRo...
摘要:首先,我承認(rèn)標(biāo)題黨的嫌疑是逃不掉的了但是,諸君請(qǐng)繼續(xù)看下去,就會(huì)發(fā)現(xiàn)還是有干貨的源碼寫(xiě)這個(gè)編輯器的難點(diǎn)有兩個(gè)對(duì)文本進(jìn)行語(yǔ)法的解析實(shí)時(shí)檢測(cè)頁(yè)面文本變化針對(duì),我在上找到了,看就能很快地上手針對(duì),我選擇的是,因?yàn)槲铱粗辛怂碾p向綁定特性當(dāng)然數(shù)據(jù)和 首先,我承認(rèn)標(biāo)題黨的嫌疑是逃不掉的了...但是,諸君請(qǐng)繼續(xù)看下去,就會(huì)發(fā)現(xiàn)還是有干貨的 源碼:https://github.com/shuiRo...
閱讀 439·2023-04-25 16:38
閱讀 1573·2021-09-26 09:46
閱讀 3413·2021-09-08 09:35
閱讀 2835·2019-08-30 12:54
閱讀 3305·2019-08-29 17:06
閱讀 1108·2019-08-29 14:06
閱讀 3415·2019-08-29 13:00
閱讀 3524·2019-08-28 17:53