降价表语法的正则表达式?

Juh*_*nen 2 regex syntax markdown github

我目前正在开发一个小工具,可以将Github Wiki转换为Github页面。现在,我正在尝试为Markdown表添加适当的支持(我所使用的解析器不支持)。

现在,我连接到解析器的词法分析器,然后通过各种Github Wiki特定的调整(即链接)对其进行扩展,然后将修改后的令牌传递回解析器。表格也应符合此方案。我的调整使用各种正则表达式模式和正则表达式替换来执行我需要的修改。

不过,我对复杂的表语法有些困惑。您可以在这里这里找到一个示例。如您所见,这里有一些结构,但是有些部分是完全可选的。

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

您将如何构建这样的正则表达式?更好的是,有人可以为我提供一些起点吗?我的方法可能被误导了(也许可以避免使用正则表达式?)。如果是这样,将更容易获得导致相同结果的任何想法。

Sea*_*ean 5

我需要针对相同问题的正则表达式解决方案。这是我到目前为止的内容,将在我能够改进的地方进行更新:

|(?:([^\r\n|]*)\|)+\r?\n\|(?:(:?-+:?)\|)+\r?\n(\|(?:([^\r\n|]*)\|)+\r?\n)+
Run Code Online (Sandbox Code Playgroud)

正则表达式可视化

Debuggex演示

经过测试 javascript

  • 那是一个令人恐惧的正则表达式。:) (2认同)
  • 我只是要放弃这个:`((\|[^|\r\n]*)+\|(\r?\n|\r)?)+` 在这里,作为对如此古老的另一个答案问题不值得。或者,如果您关心捕获组:`(?:(?:\|[^|\r\n]*)+\|(?:\r?\n|\r)?)+` (2认同)

Att*_*osz 5

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

^(\|[^\n]+\|\r?\n)((?:\|:?[-]+:?)+\|)(\n(?:\|[^\n]+\|\r?\n?)*)?$
Run Code Online (Sandbox Code Playgroud)

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

尽管它并不是真正基于Sean 的回答,但它最终确实相当相似,但有一些显着差异,例如更短一些,完成的步骤更少(根据 regex101.com 为 59 对 126 步),并且可能有更多“明智的”捕获组。此外,它还允许“不完整”的表格。(就像没有“身体”一样)。(我在一个单独的答案中添加它的原因是我确实发现它更有用,而且我的自我不允许我这样做);)。

简而言之:

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

在 Java、(Android) 和此处进行了测试:

正则表达式101

和这里:

调试器演示

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