javascript - 多行字符串中任意数量的捕获组

标签 javascript regex capture-group

我有一个很长的 Markdown 格式的字符串,它由一个或多个标题的重复部分和多行描述组成,如下所示:

**[Title1](link1) brief description** flag1, flag2
commentary,
occasionally multi-line
---

**[Title2](link2) brief description** flag3, flag4
**[Title3](link3) brief description** flag5, flag6, flag7
commentary
---

...

此顺序有时会与 --- 和下一个 header 之间交织的其他文本打乱。

我希望使用 JS 的正则表达式来处理它,以便在单独的捕获组中捕获标题、链接、描述和评论。理想情况下,从给出的示例中我希望得到如下内容:

1st match:
    group 1: Title1
    group 2: link1
    group 3: brief description
    group 4: commentary,
             occasionally multi-line

2nd match:
    group 1: Title2
    group 2: link2
    group 3: brief description 2
    group 4: Title3
    group 5: link3
    group 6: brief description 3
    group 7: commentary

 ...

我不会撒谎 - 我的正则表达式技能需要一些改进,但是我设法解决了这个问题,将其限制为单个 header (使用类似于 /\*\*\[(. *)\]\((.*)\)\s+(.*)\*\*.*\s+((?:.*\s)*?)?---/g)。由于其中的数量未指定,我不确定如何将单独的片段收集到简洁的组中,因为无论我尝试什么,我要么获得属于一个项目的标题的单独匹配,要么将第二个和后续标题与评论。

仅使用正则表达式可以吗?我想避免按项目边界分割(在本例中为 **[---),并从那里进一步切割它,因为这看起来不如单个项目优雅正则表达式匹配。

最佳答案

您正在尝试重复捕获组,然后访问所有捕获。不幸的是,这在 JavaScript 正则表达式引擎中不起作用(对于大多数其他引擎也是如此)。 .NET 引擎实际上确实支持它。

我知道你不想先分开,但这可能是最好的选择。如果您可以以某种方式使用 JS 中的 .NET 正则表达式引擎或将您的项目更改为使用 .NET/Powershell,那么您可能可以使用纯正则表达式来实现。

引用

Repeating a Capturing Group vs. Capturing a Repeated Group

关于javascript - 多行字符串中任意数量的捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25588393/

相关文章:

javascript - jQuery SVG 嵌套组

javascript - q.all 似乎表现不同,为什么?

javascript - 正则表达式:对句子中的小数、缩写和缩写词进行分词

c++ - 是否可以计算任意 std::regex 对象中捕获组的数量?

javascript - 在选择框中添加带逗号的名称

javascript - 如何在创建 React 组件时为其初始化 Redux 状态?

javascript - 正则表达式从整行或仅到给定的标记创建一个组

java - 使用正则表达式或unix选择特定列

regex - 带有捕获组的有效正则表达式,但 sed 脚本不起作用

java - 捕获组 REGEX Java