diff --git a/packages/docusaurus-utils/src/__tests__/markdownUtils.test.ts b/packages/docusaurus-utils/src/__tests__/markdownUtils.test.ts index f0a7ca3201..5d32b07f17 100644 --- a/packages/docusaurus-utils/src/__tests__/markdownUtils.test.ts +++ b/packages/docusaurus-utils/src/__tests__/markdownUtils.test.ts @@ -253,6 +253,22 @@ Lorem Ipsum }); }); + it('parses markdown h1 title with CRLF break', () => { + const markdown = `# Markdown Title\r\n\r\nLorem Ipsum`; + expect(parseMarkdownContentTitle(markdown)).toEqual({ + content: markdown, + contentTitle: 'Markdown Title', + }); + }); + + it('parses markdown h1 setext title with CRLF break', () => { + const markdown = `Markdown Title\r\n=====\r\n\r\nLorem Ipsum`; + expect(parseMarkdownContentTitle(markdown)).toEqual({ + content: markdown, + contentTitle: 'Markdown Title', + }); + }); + it('parses markdown h1 title at the top (atx style with closing #)', () => { const markdown = dedent` diff --git a/packages/docusaurus-utils/src/markdownUtils.ts b/packages/docusaurus-utils/src/markdownUtils.ts index de92ce0f33..a902c6f58f 100644 --- a/packages/docusaurus-utils/src/markdownUtils.ts +++ b/packages/docusaurus-utils/src/markdownUtils.ts @@ -198,13 +198,13 @@ export function parseMarkdownContentTitle( // `import` nodes, as broken syntax can't render anyways. That means any block // that has `import` at the very beginning and surrounded by empty lines. const contentWithoutImport = content - .replace(/^(?:import\s(?:.|\n(?!\n))*\n{2,})*/, '') + .replace(/^(?:import\s(?:.|\r?\n(?!\r?\n))*(?:\r?\n){2,})*/, '') .trim(); - const regularTitleMatch = /^#[ \t]+(?