为了账号安全,请及时绑定邮箱和手机立即绑定

Markdown 段落标记正则表达式

Markdown 段落标记正则表达式

郎朗坤 2023-05-25 17:17:35
我正在寻找可以支持以下测试用例的正则表达式:This shouldall beone match#this should not match1. nor this> nor thisthis should be a second match所以我可以将这两个匹配项包装在 <p> 标记中。但是,我被困在换行符上:两个应该打破比赛,但一个换行符不能。这是我最接近的:(^[A-z].+)这正确地抓取了所有需要的文本,但形成了四个匹配而不是所需的两个。关于正则表达式感谢您的时间。
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

您可以使用

/^[A-Za-z].*(?:\n[A-Za-z].*)*/gm

请参阅正则表达式演示

细节

  • ^- 一行的开头(由于m修饰符)

  • [A-Za-z]- 一个 ASCII 字母

  • .*- 该行的其余部分

  • (?:\n[A-Za-z].*)*- 零个或多个以 ASCII 字母开头的行。


查看完整回答
反对 回复 2023-05-25
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

这不是您可以使用单个正则表达式完成的事情。虽然某些 Markdown 实现确实使用正则表达式作为解析 Markdown 的主要工具,但它们使用一系列表达式来这样做(参见原始实现,markdown.pl例如)。

例如,您可能有一个匹配标题的表达式、一个匹配列表项的表达式、一个匹配块引号的表达式和一个匹配任何文本块的表达式。这些表达式中的每一个都将依次针对输入运行。但是,在运行最后一个表达式时,系列中的前一个表达式已经消耗了各种其他元素。因此,匹配段落的最终表达式不需要考虑标题、列表或块引用的匹配。

事实上,如果您要从 中删除标头表达式markdown.pl,那么所有标头都将简单地包装在<p>标签中,而散列 ( #) 仍包含在文本中。

我的意思是你需要实现一个完整的 Markdown 解析器。但是,已经存在许多实现。您可能最好使用一个已经存在的。事实上,大多数现代实现生成抽象语法树 (AST) 而不是进行正则表达式替换(正如另一个答案中指出的那样)。



查看完整回答
反对 回复 2023-05-25
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

像 Markdown/Commonmark 这样的语法不能 [easily, if at all] 用正则表达式解析。

使用适当的解析器来生成您可以操作的 AST。

查看完整回答
反对 回复 2023-05-25
  • 3 回答
  • 0 关注
  • 217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号