const INLINE_MARKDOWN_ELEMENTS_OBJECT = { 'strong': /\*\*([^\*]*)\*\*/g, 'em': /_([^_]*)_/g } function replaceRegex(string, regex, replacement) { const newString = string.replace(regex, replacement); return newString; } function escapeCharacters(string, escapeOption) { const escapedCharactersObject = { '\\*': '__asterisk__', '\\_': '__underscore__', '\\[': '__openBracket__', '\\]': '__closeBracket__', '\\(': '__openParenthesis__', '\\)': '__closeParenthesis__' } for (let char in escapedCharactersObject) { if (escapedCharactersObject.hasOwnProperty(char)) { escapeOption === true ? string = replaceRegex(string, char, escapedCharactersObject[char]) : escapeOption === false ? string = replaceRegex(string, escapedCharactersObject[char], char.replace(/^\\/g, '')) : null; } } return string; } function createAnchorElements(string) { return string = string.replace(/\[(?[^\]]*)\]\((?[^\)]*)\)/g, '$'); } function replacer(match, p1) { if ( p1 === '' ) { // Filters out the '__' (double underscore) matches. return match; } else { for (var el in INLINE_MARKDOWN_ELEMENTS_OBJECT) { if (INLINE_MARKDOWN_ELEMENTS_OBJECT.hasOwnProperty(el)) { match = match.replace(INLINE_MARKDOWN_ELEMENTS_OBJECT[el], '<' + el + '>$1' ); } } return match; } } function createInlineElements(string) { for (var el in INLINE_MARKDOWN_ELEMENTS_OBJECT) { if (INLINE_MARKDOWN_ELEMENTS_OBJECT.hasOwnProperty(el)) { string = string.replace(INLINE_MARKDOWN_ELEMENTS_OBJECT[el], replacer); } } return string; } function paragraphReplacer(match, p1) { if ( p1 === '' ) { // Filters out blank lines return match; } else { return match.replace(/^(.*)$/gm, '

$1

'); } } function createParagraphElements(string) { return string = string.replace(/^(.*)$/gm, paragraphReplacer); } function parseMarkdownToHTML(string) { const escapedString = escapeCharacters(string, true); const stringWithInlineElements = createInlineElements(escapedString); const stringWithAnchorElements = createAnchorElements(stringWithInlineElements); const stringWithParagraphElements = createParagraphElements(stringWithAnchorElements); const unescapedString = escapeCharacters(stringWithParagraphElements, false); //console.log(unescapedString); return unescapedString; } // // USAGE: // import parseMarkdownToHTML from './parseMarkdownToHTML.js'; // // parseMarkdownToHTML(stringContainingSimplifiedMarkdown); export default parseMarkdownToHTML;