Работа с Markdown в Node.js: библиотеки для парсинга и конвертации
Markdown — это легкий язык разметки, широко используемый для форматирования текста в документации, README-файлах, блогах и системах управления контентом. В экосистеме Node.js существует несколько мощных библиотек, которые позволяют парсить Markdown и преобразовывать его в HTML, а также выполнять обратную операцию. В этой статье мы рассмотрим три наиболее популярных инструмента: marked, showdown и remarkable, их особенности, API и примеры использования.
1. Библиотека marked
marked — это быстрый и легковесный парсер Markdown, который поддерживает все основные элементы синтаксиса (заголовки, списки, ссылки, изображения, код, таблицы и т.д.). Он отличается высокой производительностью и простотой настройки.
Установка
npm install marked
Базовое использование
Для конвертации Markdown-строки в HTML достаточно вызвать функцию marked():
const marked = require('marked');
const markdownText = `
# Привет, мир!
Это **жирный текст** и *курсив*.
- Элемент списка 1
- Элемент списка 2
[Ссылка на PythonLib](https://pythonlib.ru)
`;
const html = marked(markdownText);
console.log(html);
Результат выполнения:
<h1>Привет, мир!</h1>
<p>Это <strong>жирный текст</strong> и <em>курсив</em>.</p>
<ul>
<li>Элемент списка 1</li>
<li>Элемент списка 2</li>
</ul>
<p><a href="https://pythonlib.ru">Ссылка на PythonLib</a></p>
Настройка опций
marked поддерживает множество опций для кастомизации вывода:
const marked = require('marked');
marked.setOptions({
breaks: true, // преобразовывать переносы строк в <br>
gfm: true, // включить GitHub Flavored Markdown (таблицы, зачеркивание и т.д.)
headerIds: false, // не добавлять ID к заголовкам
mangle: false, // не экранировать email-адреса
sanitize: false // не удалять HTML-теги (опасно, используйте с осторожностью)
});
const html = marked('Строка 1\nСтрока 2');
console.log(html); // Выведет с <br> между строками
Синхронное и асинхронное использование
По умолчанию marked() работает синхронно, но поддерживает и асинхронный режим через промисы:
const marked = require('marked');
async function convertMarkdown(text) {
const html = await marked.parse(text);
return html;
}
convertMarkdown('# Заголовок').then(console.log);
2. Библиотека showdown
showdown — это еще один популярный парсер Markdown, который может работать как в браузере, так и в Node.js. Он предоставляет расширяемый API и поддерживает множество расширений.
Установка
npm install showdown
Базовое использование
Создайте экземпляр конвертера и вызовите метод makeHtml():
const showdown = require('showdown');
const converter = new showdown.Converter();
const markdownText = '## Подзаголовок\n\nОбычный текст с **выделением**.';
const html = converter.makeHtml(markdownText);
console.log(html);
Результат:
<h2>Подзаголовок</h2>
<p>Обычный текст с <strong>выделением</strong>.</p>
Расширения и кастомизация
showdown позволяет добавлять собственные расширения, например, для поддержки смайликов или LaTeX-формул:
const showdown = require('showdown');
// Создаем расширение для замены :smile: на эмодзи
const emojiExtension = function() {
return [{
type: 'lang',
regex: /:smile:/g,
replace: '😊'
}];
};
const converter = new showdown.Converter({ extensions: [emojiExtension] });
const html = converter.makeHtml('Привет :smile:!');
console.log(html); // <p>Привет 😊!</p>
Обратная конвертация (HTML в Markdown)
Showdown также поддерживает обратное преобразование — из HTML в Markdown:
const showdown = require('showdown');
const converter = new showdown.Converter();
const htmlText = Также в библиотеке
Отправка SMS на C++ с помощью API библиотеки libcurl
JWT токены в Swift: работа с JSON Web Token на iOS/macOS
WebSocket библиотеки Kotlin для создания реального времени в веб-приложениях
Машинное обучение на Rust: обзор библиотек для Data Science
Работа с CSV в PHP: чтение, запись и обработка данных