2

我正在尝试为代码围栏 markdown 找到正则表达式

```

some code

```

它应该与模式匹配,然后存储在 Javascript 数组中

首先我做了这个代码:

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

但是,由于 ``` 并不表示开始结束。如果我有多个代码围栏,它会选择整体作为单个选择,如下所示:

```

some code

```

```

some code

```

我调查了标记的代码,然后在下面发现了一些东西

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

然而,这似乎只是第一个打击。

什么是正确的正则表达式?如果它太复杂,我想我可以构造 Array 并修剪结果。

如果有一个优雅的正则表达式,我会选择它。

4

1 回答 1

1

[\s\S]+是贪心的,也匹配围栏分隔符,从而匹配太多。你有两个选择:

要么使量词惰性,因此它匹配尽可能少的字符:

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

或者使用否定的前瞻断言来确保您不匹配围栏边界:

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

全局修饰符允许正/g则表达式匹配不止一次。

于 2013-08-03T11:54:31.010 回答