const hrefReg = /\[.+\]\(\S+\)||!\[\]\(\S+\)|<\S+>/g, imageReg1 = /^/, imageReg2 = /^!\[\]\((\S+)\)/, linkReg1 = /^\[.+\]\(\S+\)/, linkReg2 = /^<\S+>$/; const getLinks = (hrefs) => { const hrefObj = { links: [], images: [] }; hrefs.forEach((href) => { if (href.search(linkReg1) >= 0 || href.search(linkReg2) >= 0) { hrefObj.links.push(href); } else { let imageSrcs = href.match(imageReg1); let imageSrcs1 = href.match(imageReg2); if (imageSrcs) { hrefObj.images.push(imageSrcs[1]); } else if (imageSrcs1) { hrefObj.images.push(imageSrcs1[1]); } } }); return hrefObj; }; const getPreviewContent = (markdownContent) => { let previewText = ''; let newMarkdownContent = markdownContent.replace(hrefReg, ''); for (let index = 0; index < newMarkdownContent.length; index++) { if (newMarkdownContent[index] === '#') { continue; } else if (newMarkdownContent[index] === '\n') { previewText += ' '; } else { previewText += newMarkdownContent[index]; } if (previewText.length === 30) { break; } } const hrefs = markdownContent.match(hrefReg); if (hrefs) { const { images, links } = getLinks(hrefs); return { previewText, images, links }; } return { previewText, images: [], links: [] }; }; export default getPreviewContent;