如何编写正则表达式匹配表格分隔行的所有单元格片段
正则解析Markdown表格分隔行实现方案
问题说明
需要通过正则表达式解析Markdown表格的分隔行,测试输入样例如下:
|---|---|---| |---|---|---|
最初编写的正则为 /^(?<indent>\s*)\|(?<cell>-+|)/g,只能匹配到每行第一个单元格片段,无法捕获后续单元格,要求不对连字符-的数量做固定限制,最终要拿到类似["---|", "----|", "---|"]格式的单元格数组。
缺陷原因
原正则加了^行首锚点,开启全局匹配时,只有整行最开头的位置能满足锚点校验规则,后续的单元格片段都不在行首位置,自然无法被命中。
修正后的正则
直接使用下面这个正则开启全局匹配即可:
/(?<indent>^\s*)?\|(?<cell>-+\|)/g
匹配逻辑
(?<indent>^\s*)?:只在行首位置捕获开头的缩进空白,非行首位置这个分组不生效,不会干扰后续单元格的匹配\|:匹配单元格之间的竖线分隔符(?<cell>-+\|):捕获1个及以上连字符加末尾竖线组成的单元格片段,完全不限制连字符的长度- 搭配
g全局匹配标志,遍历所有匹配结果提取cell分组的内容,就能得到需要的单元格数组。
效果验证
针对给出的两行样例,第一行带前导空格的 |---|---|---|会捕获到三个---|片段,第二行无前导空格的|---|---|---|也会正常捕获三个---|片段;如果遇到连字符数量不一致的单元格(比如|----|),也能正常识别,完全满足需求。
内容的提问来源于stack exchange,提问作者Kiran Parajuli
相关产品推荐
相关产品推荐

