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

Recursive regex pattern in JavaScript

本文关键字:正则表达式 模式 递归 JavaScript      更新时间:2023-09-26

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

我正在尝试在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标记的原始文本。我想取消捕获原始标签(第三个),使其真正成为一个链接。理想的输出应该是这样的。

```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(/((`(?:``)?)[^`]*'2)|&gt;/g, '$1<')
         .replace(/((`(?:``)?)[^`]*'2)|&lt;/g, '$1>')
         .replace(/`[<>]+/g, '`');

工作演示