Skip to content

Instantly share code, notes, and snippets.

@arfeo
Last active March 25, 2019 13:08
Show Gist options
  • Save arfeo/0502f6b84e4338470beede7c2b4788f9 to your computer and use it in GitHub Desktop.
Save arfeo/0502f6b84e4338470beede7c2b4788f9 to your computer and use it in GitHub Desktop.
[JS] One function markdown processing (live @ http://arfeo.net/tests/mips/)
const markdownProcessing = (source) => {
let proc = source;
// Headers
proc = proc.replace(/(^|[^#])# (.*)/gui, '$1<h1>$2</h1>');
proc = proc.replace(/(^|[^#])## (.*)/gui, '$1<h2>$2</h2>');
proc = proc.replace(/(^|[^#])### (.*)/gui, '$1<h3>$2</h3>');
proc = proc.replace(/(^|[^#])#### (.*)/gui, '$1<h4>$2</h4>');
proc = proc.replace(/(^|[^#])##### (.*)/gui, '$1<h5>$2</h5>');
proc = proc.replace(/(^|[^#])###### (.*)/gui, '$1<h6>$2</h6>');
// Images and links
proc = proc.replace(/!\[([^\]]*?)\]\(((?:.)*?)\)/gui, '<img src="$2" alt="$1" title="$5" />');
proc = proc.replace(/(\[([^\]]*?)\])\(((?:.)*?)\)/gui, '<a href="$3" target="_blank">$2</a>');
proc = proc.replace(/([\(\s)]+)(http[s]?:[\/]{2}[^\s]+)/gui, '$1<a href="$2" target="_blank">$2</a>');
// Text
proc = proc.replace(/(^|[\s])[_]{1}([^_]+)[_]{1}(?!_)/gui, '$1<em>$2</em>');
proc = proc.replace(/(^|[^\*])\*(?!\*)(.*?)\*(?!\*)/gui, '$1<em>$2</em>');
proc = proc.replace(/(^|[\s])[_]{2}([^_]+)[_]{2}(?!_)/gui, '$1<strong>$2</strong>');
proc = proc.replace(/(^|[^\*])[\*]{2}(?!\*)(.*?)[\*]{2}(?!\*)/gui, '$1<strong>$2</strong>');
proc = proc.replace(/(^|[\s])[~]{2}([^~]+)[~]{2}(?!~)/gui, '$1<strike>$2</strike>');
// Code
proc = proc.replace(/(^|[^`])`([^`]+)`(?!`)/gui, '$1<code>$2</code>');
proc = proc.replace(/[`]{3}.*?\n([^`]+)[`]{3}/gui, '<pre>$1</pre>');
proc = proc.replace(/(^|[\n]{2})(([\s]{4}.*)+)/gui, '$1<pre>$2</pre>');
// Checkboxes
proc = proc.replace(/(^|[\n])[\-]{1}\s\[\s\](.*)/gui, '$1<input type="checkbox" disabled>$2');
proc = proc.replace(/(^|[\n])[\-]{1}\s\[x\](.*)/gui, '$1<input type="checkbox" checked disabled>$2');
// Lists
proc = proc.replace(/(^|[\n]{2})([\*|\-|\+]\s)/gui, '$1<ul>\n$2');
proc = proc.replace(/(^|[\n]{2})(\d\.\s)/gui, '$1<ol>\n$2');
proc = proc.replace(/(^|\n)(([\*|\-|\+]\s.*)[\n]{2})/gui, '$1$3\n</ul>\n\n');
proc = proc.replace(/(^|\n)(([\s]{2}[\*|\-|\+]\s.*)[\n]{2})/gui, '$1$3\n</ul>\n\n');
proc = proc.replace(/(^|\n)((\d\.\s.*)[\n]{2})/gui, '$1$3\n</ol>\n\n');
proc = proc.replace(/(^|[\n])[\*|\-|\+]{1}\s(.*)((\n[\s]{2}[\*|\-|\+]\s.*)+)/gui, '$1<li>$2\n<ul>$3\n</ul>\n</li>');
proc = proc.replace(/(^|[\n])\d\.\s(.*)((\n[\s]{2}\d\.\s.*)+)/gui, '$1<li>$2\n<ol>$3\n</ol>\n</li>');
proc = proc.replace(/(^|[\n])[\*|\-|\+]{1}\s(.*)/gui, '$1<li>$2</li>');
proc = proc.replace(/(^|[\n])[\s]{2}[\*|\-|\+]{1}\s(.*)/gui, '$1<li>$2</li>');
proc = proc.replace(/(^|[\n])\d\.\s(.*)/gui, '$1<li>$2</li>');
proc = proc.replace(/(^|[\n])[\s]{2}\d\.\s(.*)/gui, '$1<li>$2</li>');
// Quotes
proc = proc.replace(/(^|[\n]{2})((>|&gt;)[\s]?)/gui, '$1<blockquote>\n$2');
proc = proc.replace(/(^|\n)(((>|&gt;)[\s]?.*)[\n]{2})/gui, '$1$3</blockquote>\n');
proc = proc.replace(/(^|[\n])(>|&gt;)\n/gui, '\n\n');
proc = proc.replace(/(^|[\n])(>|&gt;)[\s]?(.*)/gui, '$3\n');
// Paragraphs
proc = proc.replace(/(^|[\n]{2})(?!<)(.*)/gui, '<p>$2</p>');
return proc;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment