gpt4 book ai didi

javascript - 使用正则表达式将连续行标记为 Markdown 中的段落。模式并不像看起来那样有效

转载 作者:行者123 更新时间:2023-12-03 01:27:22 24 4
gpt4 key购买 nike

According to the CommonMark spec ,不能归类为任何其他 block 元素(标题、水平线、列表、引号、代码块)的文本成为段落。这将是一行不以 # (标题)、- (水平规则、无序列表)、> (引号)开头的行,数字(有序列表)或空格(代码块)。

所以我构建了以下模式来提取文本:

/(?:^|\n{2,})((?:[^#>\-*\d ][^\n]+)+)(?:$|\n{2,})/gm

以下是我正在测试的文本 block :

The quick brown fox
jumps over the lazy dog

Lorem Ipsum

I should match
- I should NOT match

Le sigh

> Why am I matching?
1. Nonononono!
* Aaaagh!
# Stahhhp!

Hello, World!

据我所知,我制作的模式将匹配由 2 个换行符(行的开头或结尾)界定的文本。然后,它将捕获不以 #>\-*\d 开头的连续文本行。这种模式几乎工作得很好,它正确匹配连续的行,同时分割由 2 个换行符绑定(bind)的行。 问题是它匹配以 #>\-*\d 开头的行,而它不应该匹配。我对这个模式做错了什么?

您可以通过访问https://regex101.com/来测试这一点,将 flavor 设置为 JavaScript 并粘贴上面的模式和文本。

最佳答案

您的多行参数导致了此问题。如果您尝试检查您不想匹配的区域,则该区域在开头仅匹配一行,而不是两行。但是,当您不使用多行时,您也可能会丢失其他匹配。

我建议使用没有两个或多个换行符的多行选项。

我尝试构建一个符合您的条件的模式:

/^(?![#>\-*\d ]).+\n?.+/gm

我相信这不是优化的,但我认为它有效:)

编辑:精炼版本为

/^(?![#>\-*\d ])((?![#>\-*\d ]).+\n?)+/gm

干杯

关于javascript - 使用正则表达式将连续行标记为 Markdown 中的段落。模式并不像看起来那样有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51468095/

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