我目前正在开发a little tool,它允许我将Github wikis转换为Github页面。现在我正在尝试为Markdown表添加适当的支持(我正在使用的解析器不支持)。
现在我连接到解析器的词法分析器,然后使用各种Github wiki特定的调整(即链接)扩展它,然后将修改后的标记传递回解析器。表格也应符合此方案。我的调整使用各种正则表达式和正则表达式替换,以执行我需要的修改。
但是,我对复杂的表语法有些困惑。您可以找到here和here的示例。你可以看到有一些结构,但有些部分完全是可选的。我已经考虑过了,我想我想要一个正则表达式,它会输出一个包含标题(第一行),列对齐数据(第二行)和实际内容作为单独组的组。它应包含至少一个内容行以便匹配。标题和对齐数据也必须遵守某些规则,如示例所示。
你会如何建立像这样的正则表达式?更好的是,有人可以为我提供一些建立起点的起点吗?我的方法可能被误导(也许可以避免正则表达式?)。如果是这样的话,任何导致相同结果的想法都会受到赞赏。
答案 0 :(得分:4)
我需要针对同一问题的正则表达式解决方案。这是我到目前为止所做的,将更新它,因为我能够改进它:
|(?:([^\r\n|]*)\|)+\r?\n\|(?:(:?-+:?)\|)+\r?\n(\|(?:([^\r\n|]*)\|)+\r?\n)+
使用javascript
答案 1 :(得分:2)
我做过的事:
[|]?(\s+[A-Za-z0-9 -_*#@$%:;?!.,\/\\]+\s+)[|]?[|]?(\s+[A-Za-z0-9 -_*#@$%:;?!.,\/\\]+\s+)[|]?[|]?(\s+[A-Za-z0-9 -_*#@$%:;?!.,\/\\]+\s+)[|]?\r?\n?\|?:-+:\|?:-+:\|?:-+:\|?
-modifier - global
\|?:-+:\|?:-+:\|?:-+:\|?\r?\n?
- 修饰符 - 全局
[|]?(\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 |
答案 2 :(得分:1)
我最终完全跳过正则表达式,并使用传统逻辑将它们整合在一起。它可能不像基于正则表达式那样漂亮或短,但至少我可以轻松地保持这一点。
我确实找到了一些可能符合此目的的正则数据集。请参阅MultiMarkdown。
答案 3 :(得分:1)
我遇到了同样的问题,却没有找到合适的答案,我最终提出了以下建议。
^(\|[^\n]+\|\r?\n)((?:\|:?[-]+:?)+\|)(\n(?:\|[^\n]+\|\r?\n?)*)?$
标记是“全局”和“多行”。
尽管它并不是真的基于Sean's answer,但最终确实非常相似,但有一些显着差异,例如更短,完成的步骤更少(根据regex101.com,分别为59步和126步) ),并且可能拥有更多“明智”的捕获群体。另外,它也允许“不完整”表。 (因为没有“身体”)。 (我之所以将其添加到单独的答案中,是因为我确实确实发现它更有用,而且我的自我不允许我这样做);)。
简而言之:
|
字符开头和结尾,并且“单元格对齐”行的格式正确。在Java(Android)和此处进行过测试:
和此处:
希望它可以帮助某人。 :)