2013-08-03 30 views
1

我正在試圖找到代碼柵欄markdown的正則表達式。代碼柵欄markdown的正則表達式。它很簡單嗎?

``` 

some code 

``` 

它應該匹配的模式,然後將其存儲在Javascript

首先的陣列I製成這樣的代碼:

```+\n[\s\S]+```+ 

然而,由於```不指示開始端。如果我有多個代碼圍欄,它選擇全像像下面的一個選擇:

``` 

some code 

``` 

``` 

some code 

``` 

我調查則marked代碼中發現以下

fences: /^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/ 
然而

的東西,這似乎只是MATHE先打。

什麼是正確的正則表達式?如果它太複雜了,我想我可以修改結果來構造Array。

如果有一個優雅的正則表達式,我會選擇它。

+0

JavaScript。謝謝 –

回答

2

[\s\S]+是貪婪的,匹配的還有fence分隔符,從而匹配得太多。你有兩個選擇:

要麼做量詞懶,所以儘可能少的字符匹配越好:

/```\n[\s\S]+?```/g 

或者使用negative lookahead assertion,以確保你不跨越護欄邊界匹配:

/```\n(?:(?!```)[\s\S])+```/g 

全局修飾符/g允許正則表達式匹配不止一次。

+0

\'\'\'+ \ n [\ s \ S] +?\'''''+看起來不錯。一如既往地感謝您的精彩教程。 @Tim –