Markdown表语法的正则表达式?

问题描述 投票:1回答:4

我正在开发a little tool,它允许我将Github wikis转换为Github页面。现在我正在尝试为Markdown表添加适当的支持(我正在使用的解析器不支持)。

现在我连接到解析器的词法分析器,然后使用各种Github wiki特定的调整(即链接)扩展它,然后将修改后的标记传递回解析器。表格也应符合此方案。我的调整使用各种正则表达式和正则表达式替换,以执行我需要的修改。

不过,我对复杂的表语法有些困惑。你可以找到一个herehere的例子。你可以看到有一些结构,但有些部分是完全可选的。

我已经考虑了一下,我想我想要一个正则表达式,它会输出一个包含标题(第一行),列对齐数据(第二行)和实际内容作为单独组的组。它应包含至少一个内容行以便匹配。标题和对齐数据也必须遵守某些规则,如示例所示。

你会如何建立像这样的正则表达式?更好的是,有人可以为我提供一些建立起点的起点吗?我的方法可能被误导(也许可以避免正则表达式?)。如果是这样,任何导致相同结果的想法都会受到赞赏。

regex github syntax markdown
4个回答
2
投票

我有同样的问题,从来没有找到合适的答案,我最终想出了以下内容。

^(\|[^\n]+\|\r?\n)((?:\|:?[-]+:?)+\|)(\n(?:\|[^\n]+\|\r?\n?)*)?$

标志是“全局”和“多线”。

虽然它并不是真正基于Sean's answer,但它确实最终变得非常相似,但有一些显着的差异,比如缩短一点,以较少的步骤完成(59和126步,根据regex101.com),并且可能更多“明智的“捕获群体。另外,它也允许“不完整”的表格。 (如同没有“身体”)。 (我在一个单独的答案中添加它的原因是我确实发现它更有用,加上我的自我不允许我这样做);)。

简而言之:

  • 它只允许“严格”的降价表,其中每一行以|字符开头和结尾,并且“单元格对齐”行格式正确。
  • 第一组捕获“头部”,第二组捕获“细胞比对”线,(可选)第三组捕获“身体”。
  • 它需要至少一个完整且格式正确的“对齐”单元格才能将其视为一个表格,否则将匹配不完整的表格(即没有“正文”)。

在Java(Android)和这里测试:

Regex101

和这里:

Debuggex Demo

希望它可以帮助某人。 :)


5
投票

我需要一个针对同一问题的正则表达式解决方案。这是我到目前为止所做的,将更新它,因为我能够改进它:

|(?:([^\r\n|]*)\|)+\r?\n\|(?:(:?-+:?)\|)+\r?\n(\|(?:([^\r\n|]*)\|)+\r?\n)+

Debuggex Demo

javascript测试


2
投票

我做过的事情:

  1. 用于解析表头和分隔符的正则表达式!!

[|]?(\s+[A-Za-z0-9 -_*#@$%:;?!.,\/\\]+\s+)[|]?[|]?(\s+[A-Za-z0-9 -_*#@$%:;?!.,\/\\]+\s+)[|]?[|]?(\s+[A-Za-z0-9 -_*#@$%:;?!.,\/\\]+\s+)[|]?\r?\n?\|?:-+:\|?:-+:\|?:-+:\|? -Edit - 全球

  1. 正则表达式标题和文本之间的分隔符

\|?:-+:\|?:-+:\|?:-+:\|?\r?\n? - 修改 - 全局

  1. 正则表达式解析标题分隔符之前和之后的所有元素!

[|]?(\s+[A-Za-z0-9 -_*#@$%:;?!.,\/\\]+\s+)[|]?[|]?(\s+[A-Za-z0-9 -_*#@$%:;?!.,\/\\]+\s+)[|]?[|]?(\s+[A-Za-z0-9 -_*#@$%:;?!.,\/\\]+\s+)[|]?\r?\n?

- 修饰符 - 全局,多行

这是表,用于解析。

| Tables | Are | Cool | |:-------------:|:-------------:|:-----:| | col 3 is | r-l | $1600 | | col 2 is | centered | $12 | | zebra stripes | are neat | $1 |


1
投票

我最终完全跳过了Regex并且使用传统逻辑将它们一起破解。它可能不像基于正则表达式的那样漂亮或短,但至少我可以轻松地保持这一点。

我确实找到了一些可能符合这个目的的正则数据集。见MultiMarkdown

© www.soinside.com 2019 - 2024. All rights reserved.