[![npm version](https://img.shields.io/npm/v/remove-markdown.svg)](https://www.npmjs.com/package/remove-markdown)
[![npm downloads](https://img.shields.io/npm/dm/remove-markdown.svg)](https://npm-compare.com/remove-markdown/#timeRange=THREE_YEARS)
[![GitHub Actions Build Status](https://github.com/zuchka/remove-markdown/actions/workflows/default.yaml/badge.svg)](https://github.com/zuchka/remove-markdown/actions/workflows/default.yaml)

## What is it?
**remove-markdown** is a node.js module that will remove (strip) Markdown formatting from text.
*Markdown formatting* means pretty much anything that doesn’t look like regular text, like square brackets, asterisks etc.

## When do I need it?
The typical use case is to display an excerpt from some Markdown text, without any of the actual Markdown syntax - for example in a list of posts.

## Installation

```
npm install remove-markdown
```

## Usage
```js
const removeMd = require('remove-markdown');
const markdown = '# This is a heading\n\nThis is a paragraph with [a link](http://www.disney.com/) in it.';
const plainText = removeMd(markdown); // plainText is now 'This is a heading\n\nThis is a paragraph with a link in it.'
```

You can also supply an options object to the function. Currently, the following options are supported:

```js
const plainText = removeMd(markdown, {
  stripListLeaders: true ,     // strip list leaders (default: true)
  listUnicodeChar: '',         // char to insert instead of stripped list leaders (default: '')
  gfm: true,                   // support GitHub-Flavored Markdown (default: true)
  useImgAltText: true,         // replace images with alt-text, if present (default: true)
  abbr: true,                  // remove abbreviations, if present (default: false)
  replaceLinksWithURL: true,   // remove inline links, if present (default: false)
  separateLinksAndTexts: ': ', // replace inline links with text, separator and link, if present (default: null)
  htmlTagsToSkip: ['a', 'b'],  // HTML tags to skip, if present (default: [])
  throwError: false,           // throw errors instead of catching and logging (default: false)
});
```

Setting `stripListLeaders` to false will retain any list characters (`*, -, +, (digit).`).

## TODO
PRs are very much welcome. Here are some ideas for future enhancements:

* Allow the RegEx expressions to be customized per rule
* Make the rules more robust, support more edge cases
* Add more (comprehensive) tests

## Credits
The code is based on [Markdown Service Tools - Strip Markdown](http://brettterpstra.com/2013/10/18/a-markdown-service-to-strip-markdown/) by Brett Terpstra.

## Authors
Stian Grytøyr (original creator)
[zuchka](https://github.com/zuchka) (maintainer since 2023)
