Regex -匹配到下一个带有# [closed]的示例

0g0grzrc  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(97)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

昨天关门了。
Improve this question
我试图弄清楚如何在正则表达式中使用一系列特殊字符进行分组(e.g.“#",“##","###”),类似于markdown。对于一个级别,我想收集里面的所有内容,包括较低的级别。例如,如果我有一个级别“##",我想收集里面的所有文本,直到下一个“##",包括任何“###”或“####"等。
演示文本为:

## Test 1
This is some test text for block 1.

## Test 2
This is some test text for block 2.

### Test 2.1
This is some test text for block 2.1.

## Test 3
This is some test text for block 3.

如何编写正则表达式来处理这样的匹配?
这是我已经尝试过的:

/(?<=##\s)([\w\s\n#.]*)(?=##)/g

但这不起作用。它从第一个“##”到最后一个“##"匹配,包括其间相同级别的所有块。

zc0qhyus

zc0qhyus1#

/(#{2,3}) ((.|\s)*?)(?=(#{2,3})|$)/g
明细:
(#{2,3]) =捕获##或###
((.|\s)*?) =无贪婪捕获任何字符或空格
(?=(#{2,3})|$) =向前查找##或###或字符串结尾
下面是一个示例代码片段,它仅使用replace突出显示2个捕获组。
第一个

nfg76nw0

nfg76nw02#

以下是最终奏效的方法。

/(?<=##\s)([\s\S]+?)(?=\n##\s|$)/g

这将捕获每个##级别及其下的任何级别(例如###)。

相关问题