0

我有一个长的 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
---

...

此顺序偶尔会与其他文本打断,交织---在下一个标题之间。

我希望使用 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

 ...

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

仅使用正则表达式可以吗?我想避免按项目边界(在这种情况下)拆分**[---从那里进一步切碎,因为这似乎不如单个正则表达式匹配那么优雅。

4

2 回答 2

1

我想我用一个正则表达式得到了它

var re = /(?:\*\*\[(.*)\]\((.+)\) (.+)\*\* .*\n)(?:([^\*(?:\-\-\)]+))?/g;

我不确定这是您要求的,但它与您的输入和输出相匹配。你可以在这里玩它(Regex101 示例)

在这里您可以找到一个使用该正则表达式并显示捕获的组的JSFiddle 。

当然,它不是很严格,因此您可能必须根据需要进行更改。

我希望这是你想要的。

于 2014-08-31T17:49:54.013 回答
1

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

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

参考

重复捕获组与捕获重复组

于 2014-08-31T16:59:54.630 回答