export function autoFixMarkdown(markdown: string): string { return autoCloseTrailingLink(markdown); } function autoCloseTrailingLink(markdown: string): string { // Fix unclosed Markdown links or images let fixedMarkdown: string = markdown; // Fix unclosed image syntax ![...](...) fixedMarkdown = fixedMarkdown.replace( /!\[([^\]]*)\]\(([^)]*)$/g, (match: string, altText: string, url: string): string => { return `![${altText}](${url})`; }, ); // Fix unclosed link syntax [...](...) fixedMarkdown = fixedMarkdown.replace( /\[([^\]]*)\]\(([^)]*)$/g, (match: string, linkText: string, url: string): string => { return `[${linkText}](${url})`; }, ); // Fix unclosed image syntax ![...] fixedMarkdown = fixedMarkdown.replace( /!\[([^\]]*)$/g, (match: string, altText: string): string => { return `![${altText}]`; }, ); // Fix unclosed link syntax [...] fixedMarkdown = fixedMarkdown.replace( /\[([^\]]*)$/g, (match: string, linkText: string): string => { return `[${linkText}]`; }, ); // Fix unclosed images or links missing ")" fixedMarkdown = fixedMarkdown.replace( /!\[([^\]]*)\]\(([^)]*)$/g, (match: string, altText: string, url: string): string => { return `![${altText}](${url})`; }, ); fixedMarkdown = fixedMarkdown.replace( /\[([^\]]*)\]\(([^)]*)$/g, (match: string, linkText: string, url: string): string => { return `[${linkText}](${url})`; }, ); return fixedMarkdown; }