JavaScript 中的递归正则表达式模式

Recursive regex pattern in JavaScript

我知道这将是一个非常明显的答案,但我找不到任何关于如何做到这一点的信息。

我正在尝试在 HTML 字符串

中取消转义 <>

我的测试输出字符串本质上是:

```php
&gt;h2&lt;Heading2&gt;/h2&lt;
```

`&gt;h2&lt;Heading2&gt;/h2&lt;`

&gt;h2&lt;Heading2&gt;/h2&lt;

所以在这个例子中,我们有 Github 风格的 Markdown,一个常规的 code markdown 片段,然后是原始文本,它们都带有相同的 HTML 标签。我想取消转义原始标记(第三个)以实际成为 link。理想的输出应该是这样的。

```php
&gt;h2&lt;Heading2&gt;/h2&lt;
```

`&gt;h2&lt;Heading2&gt;/h2&lt;`

<h2>Heading2</h2>

我无法在同一行中获取多个 &gt;

当前正则表达式:

/(?:.*?(&gt;))/

这将获得第一个条目。

/(?:.*?(&gt;))/g

这个获得第二个条目。我希望它能够获得每个条目。那么,只要扔掉刻度片就可以了。

/(?:```|`)(?:.*?(&gt;)).*?(?:```|`)/gs

如果您打算为此任务使用正则表达式,您可以考虑以下几点:

var r = s.replace(/((`(?:``)?)[^`]*)|&gt;/g, '<')
         .replace(/((`(?:``)?)[^`]*)|&lt;/g, '>')
         .replace(/`[<>]+/g, '`');

Working Demo