选择以3个换行符分隔的块

时间:2018-12-26 15:52:07

标签: regex markdown

我有一个现有的正则表达式(https://regexr.com/45gpv),该正则表达式选择由2个新行字符分隔的块:

/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/gm

,我想将其更改为可以使用 3个新行字符。我标记了所需的行为。 (单行和双行不应作为分隔符。)

lorem ipusm dolor ↵        ⎤ 
sit amet, consectetur. ↵   ⎦ 
↵                          
↵
adipiscing elit, ↵         ⎤
sed do eiusmod tempor ↵    ⎥
↵                          ⎥
incididunt ut labore ↵     ⎥
et dolore ↵                ⎥
magna aliqua. ↵            ⎦
↵
↵
ut enim ad minim veniam, quis nostrud exercitation ullamco ⎤ 
laboris nisi ut aliquip ex ea commodo consequat.           ⎦

有人可以帮我编辑正则表达式吗,我无法重塑。

我使用simple-markdown规则的正则表达式来实现markdown-> html解析器。

使用旧正则表达式的实际规则如下:

export const sectionRule = {
  order: SimpleMarkdown.defaultRules.paragraph.order - 0.5,
  match: blockRegex(/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/),
  parse: parseCaptureInline,
  react: (node, output, state) => <section>{output(node.content)}</section>,
};

2 个答案:

答案 0 :(得分:1)

您可以使用:

/([\s\S]*?)(?:\R{3,}|\z)/

Demo

(注意:仅当三行不包含示例中包含的水平空白字符时,此方法才有效。)

答案 1 :(得分:1)

您可以使用

/^.+(?:\n{1,2}.+)*/gm

请参见regex demo

详细信息

  • ^-行的开头(由于m修饰符)
  • .+-除换行符以外的1个或更多字符
  • (?:\n{1,2}.+)*-零个或多个序列
    • \n{1,2}-1或2个换行符
    • .+-除换行符以外的1个或更多字符。

在某些正则表达式中,.可以匹配除LF之外的任何字符,在某些情况下,它可以匹配除换行符以外的任何字符。要使模式“更安全”,只需将.替换为[^\n]/^[^\n]+(?:\n{1,2}[^\n]+)*/gm

如果您必须将其调整为\r\n\n或仅\r结尾,请使用/^[^\r\n]+(?:(?:\r\n?|\n){1,2}[^\r\n]+)*/gm