Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | 187x 187x 187x 187x 187x 187x 187x 187x 187x 187x 187x | //From https://github.com/stiang/remove-markdown
interface StripMarkdownOptions {
stripListLeaders?: boolean; // strip list leaders (default: true)
listUnicodeChar?: string; // char to insert instead of stripped list leaders (default: '')
gfm?: boolean; // support GitHub-Flavored Markdown (default: true)
useImgAltText?: boolean; // replace images with alt-text, if present (default: true)
}
export default function stripMarkdown(
md: string,
{
listUnicodeChar,
stripListLeaders,
gfm,
useImgAltText,
}: StripMarkdownOptions = {
gfm: true,
listUnicodeChar: "",
stripListLeaders: true,
useImgAltText: true,
},
) {
let output = md || "";
// Remove horizontal rules (stripListHeaders conflict with this rule, which is why it has been moved to the top)
output = output.replace(/^(-\s*?|\*\s*?|_\s*?){3,}\s*$/gm, "");
try {
if (stripListLeaders) {
Iif (listUnicodeChar)
output = output.replace(
/^([\s\t]*)([*\-+]|\d+\.)\s+/gm,
listUnicodeChar + " $1",
);
else output = output.replace(/^([\s\t]*)([*\-+]|\d+\.)\s+/gm, "$1");
}
if (gfm) {
output = output
// Header
.replace(/\n={2,}/g, "\n")
// Fenced codeblocks
.replace(/~{3}.*\n/g, "")
// Strikethrough
.replace(/~~/g, "")
// Fenced codeblocks
.replace(/`{3}.*\n/g, "");
}
output = output
// Remove HTML tags
.replace(/<[^>]*>/g, "")
// Remove setext-style headers
.replace(/^[=-]{2,}\s*$/g, "")
// Remove footnotes?
.replace(/\[\^.+?\](: .*?$)?/g, "")
.replace(/\s{0,2}\[.*?\]: .*?$/g, "")
// Remove images
.replace(/!\[(.*?)\][[(].*?[\])]/g, useImgAltText ? "$1" : "")
// Remove inline links
.replace(/\[(.*?)\][[(].*?[\])]/g, "$1")
// Remove blockquotes
.replace(/^\s{0,3}>\s?/g, "")
// Remove reference-style links?
.replace(/^\s{1,2}\[(.*?)\]: (\S+)( ".*?")?\s*$/g, "")
// Remove atx-style headers
.replace(
/^(\n)?\s{0,}#{1,6}\s+| {0,}(\n)?\s{0,}#{0,} {0,}(\n)?\s{0,}$/gm,
"$1$2$3",
)
// Remove emphasis (repeat the line to remove double emphasis)
.replace(/([*_]{1,3})(\S.*?\S{0,1})\1/g, "$2")
.replace(/([*_]{1,3})(\S.*?\S{0,1})\1/g, "$2")
// Remove code blocks
.replace(/(`{3,})(.*?)\1/gm, "$2")
// Remove inline code
.replace(/`(.+?)`/g, "$1")
// Replace two or more newlines with exactly two? Not entirely sure this belongs here...
.replace(/\n{2,}/g, "\n\n");
} catch (e) {
console.error(e);
return md;
}
return output;
}
|