gpt4 book ai didi

javascript - 检测并替换 Markdown 文档中的文本段落

转载 作者:行者123 更新时间:2023-11-28 06:28:21 24 4
gpt4 key购买 nike

我正在尝试编写/使用现有的 Markdown 解析器之一来查找并替换 Markdown 文档中的每个文本段落,并保持其他所有内容不变。

输入示例:

# A First Level Header

## Second Level Header

Now is the time for all good men to come to the aid of their country. This is just a regular paragraph.

The quick brown fox jumped over the lazy dog's back.

### Header 3

> This is a blockquote.
>
> This is the second paragraph in the blockquote.
>
> ## This is an H2 in a blockquote

期望的效果是识别段落并替换它们,例如

# A First Level Header

## Second Level Header

[replaced]

[replaced]

### Header 3

> This is a blockquote.
>
> This is the second paragraph in the blockquote.
>
> ## This is an H2 in a blockquote

现有库,例如 markedmarkdown-it似乎无法解析和重新创建 Markdown 文档而不产生副作用。

在 Markdown 文档中查找和替换文本段落的最佳方法是什么?

最佳答案

Markdown 中的段落本质上是任何文本 block ,不是任何其他 block 级结构(由 Syntax Rules 定义)。因此,段落是一个文本 block ,它不是标题、列表、 block 引用、代码块或水平规则(因为这些是 Markdown 中定义的唯一其他 block 级结构 - 忽略一些非官方扩展)。

由于您只对查找根级别段落(而不是嵌套段落)感兴趣,因此一种简单的方法可能是简单地将文档拆分为双换行符,然后针对每个 block 的开头运行正则表达式,检查标识非的标记。 -段落类型。如果它以四个或更多空格(或一个制表符)开头;不是一个段落。如果它以 0-3 个空格和一个哈希开头;不是一个段落。如果是以0-3个空格开头,一个>和一个空格;不是一个段落。如果它以 0-3 个空格开头,则为 *、-、+ 之一和一个空格,而不是段落。等等...

一个麻烦点是 header 。标题只能是一行,哈希标题与其后面的段落之间不能有空行。然而,这很容易解决,因为标题只能是一行。如果您找到一个 header (以哈希开头的 block ),则将第一行分开,其他任何内容都是一个单独的 block ,可能是也可能不是段落。

当然,一个更棘手的问题是 setext header ,因为第二行标识它们具有 header 。然而,查找第一个换行符后跟 3 个或更多 -= 的正则表达式应该可以解决问题。

如果您查看一些现有的 Markdown 实现,您需要的大多数正则表达式已经存在。当然,您将开发自己的 Markdown 解析器,并且可能会遇到各种边缘情况。但是,考虑到您非常具体的需求,我不确定您是否会找到一个现有的解析器来满足您的需求。

关于javascript - 检测并替换 Markdown 文档中的文本段落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34914559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com