Выберите блоки, разделенные 3 новыми строками - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть существующее регулярное выражение (https://regexr.com/45gpv), которое выбирает блоки, разделенные двумя символами новой строки:

/^((?:[^\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 для реализации уценки -> 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 голосов
/ 26 декабря 2018

Вы можете использовать

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

См. Демоверсию regex

Подробности

  • ^- начало строки (из-за модификатора 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

0 голосов
/ 26 декабря 2018

Вы можете использовать:

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

Демонстрация

(Примечание: это работает, только если три строки не содержат горизонтальные пробелы, которые вы, например, имеете.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...