fix(v2): optimize markdown parser regex (fix #4726) (#4729)

* fix(v2): optimize markdown parser regex

* Change test description

Co-authored-by: Nam Hoang Le <nam.hoang.le@mgm-tp.com>
This commit is contained in:
Nam Hoang Le 2021-05-06 00:47:29 +07:00 committed by GitHub
parent e641caba10
commit 8c39826496
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 53 additions and 2 deletions

View file

@ -358,6 +358,57 @@ describe('parseMarkdownContentTitle', () => {
contentTitle: undefined,
});
});
test('Should parse markdown h1 title placed after multiple import declarations', () => {
const markdown = dedent`
import Component1 from '@site/src/components/Component1';
import Component2 from '@site/src/components/Component2';
import Component3 from '@site/src/components/Component3';
import Component4 from '@site/src/components/Component4';
import Component5 from '@site/src/components/Component5';
import Component6 from '@site/src/components/Component6';
import Component7 from '@site/src/components/Component7';
import Component8 from '@site/src/components/Component8';
import Component9 from '@site/src/components/Component9';
import Component10 from '@site/src/components/Component10';
import Component11 from '@site/src/components/Component11';
import Component12 from '@site/src/components/Component12';
import Component13 from '@site/src/components/Component13';
import Component14 from '@site/src/components/Component14';
import Component15 from '@site/src/components/Component15';
# Markdown Title
Lorem Ipsum
`;
expect(parseMarkdownContentTitle(markdown)).toEqual({
content: dedent`
import Component1 from '@site/src/components/Component1';
import Component2 from '@site/src/components/Component2';
import Component3 from '@site/src/components/Component3';
import Component4 from '@site/src/components/Component4';
import Component5 from '@site/src/components/Component5';
import Component6 from '@site/src/components/Component6';
import Component7 from '@site/src/components/Component7';
import Component8 from '@site/src/components/Component8';
import Component9 from '@site/src/components/Component9';
import Component10 from '@site/src/components/Component10';
import Component11 from '@site/src/components/Component11';
import Component12 from '@site/src/components/Component12';
import Component13 from '@site/src/components/Component13';
import Component14 from '@site/src/components/Component14';
import Component15 from '@site/src/components/Component15';
Lorem Ipsum
`,
contentTitle: 'Markdown Title',
});
});
});
describe('parseMarkdownString', () => {

View file

@ -86,10 +86,10 @@ export function parseMarkdownContentTitle(
const content = contentUntrimmed.trim();
const regularTitleMatch = /^(?:import\s.*(from.*)?;?|\n)*?(?<pattern>#\s*(?<title>[^#\n{]*)+[ \t]*(?<suffix>({#*[\w-]+})|#)?\n*?)/g.exec(
const regularTitleMatch = /^(?:import\s+\S+(\s+from\s+\S+)?;?|\n)*?(?<pattern>#\s*(?<title>[^#\n{]*)+[ \t]*(?<suffix>({#*[\w-]+})|#)?\n*?)/g.exec(
content,
);
const alternateTitleMatch = /^(?:import\s.*(from.*)?;?|\n)*?(?<pattern>\s*(?<title>[^\n]*)\s*\n[=]+)/g.exec(
const alternateTitleMatch = /^(?:import\s+\S+(\s+from\s+\S+)?;?|\n)*?(?<pattern>\s*(?<title>[^\n]*)\s*\n[=]+)/g.exec(
content,
);