marked.parser — это метод библиотеки
Marked, предназначенный для конвертации
токенизированного Markdown в HTML. Он является ключевым инструментом,
когда требуется управлять процессом парсинга на более детальном уровне,
отличаясь от высокоуровневого marked() тем, что позволяет
работать непосредственно с массивом токенов, полученных методом
marked.lexer.
Прежде чем использовать marked.parser, необходимо
получить токены. Это делается с помощью:
const marked = require('marked');
const markdownText = `
# Заголовок первого уровня
Текстовый абзац с **жирным** и *курсивным* текстом.
- Пункт списка 1
- Пункт списка 2
`;
const tokens = marked.lexer(markdownText);
console.log(tokens);
В результате tokens будет массив объектов, где каждый
объект представляет отдельный элемент Markdown: заголовок, абзац,
список, блок кода и так далее.
Ключевые свойства токена:
type — тип элемента (heading,
paragraph, list, code,
blockquote и др.).text — текстовое содержимое элемента.depth — для заголовков, указывает уровень
(1–6).tokens — вложенные токены, например, внутри
списка.marked.parserПосле получения токенов их можно преобразовать в HTML с помощью:
const html = marked.parser(tokens);
console.log(html);
Метод marked.parser рекурсивно проходит по массиву
токенов, обрабатывая каждый в зависимости от его type, и
возвращает итоговую строку HTML.
marked.parser через опцииmarked.parser принимает второй аргумент — объект опций,
позволяющий контролировать парсинг:
const html = marked.parser(tokens, {
renderer: new marked.Renderer(),
gfm: true,
breaks: false,
sanitize: false
});
Основные опции:
marked.Renderer, который переопределяет стандартные методы
генерации HTML для каждого типа токена.true обычный перенос
строки преобразуется в <br>.true удаляет
потенциально опасный HTML.Renderer позволяет точно контролировать HTML, который генерируется для каждого токена:
const renderer = new marked.Renderer();
renderer.heading = function(text, level) {
return `<h${level} class="custom-heading">${text}</h${level}>`;
};
renderer.listitem = function(text) {
return `<li class="custom-item">${text}</li>`;
};
const html = marked.parser(tokens, { renderer });
console.log(html);
Такой подход особенно полезен при интеграции с системами, где требуется особая структура HTML или кастомные CSS-классы.
Метод marked.parser автоматически обрабатывает вложенные
структуры. Например, списки внутри блоков цитат или параграфы внутри
списков:
const markdown = `
> Цитата:
> - Пункт 1
> - Пункт 2
`;
const tokens = marked.lexer(markdown);
const html = marked.parser(tokens);
console.log(html);
В этом случае marked.parser рекурсивно обрабатывает
массив токенов для цитаты, внутри которого находится список с
собственными токенами. Результат будет корректным HTML с
<blockquote> и
<ul><li>...</li></ul>.
marked.parser вместо
marked()marked.lexer перед
marked.parser, если требуется кастомизация
вывода.gfm и
breaks, чтобы обеспечить совместимость с GitHub
Flavored Markdown, если это важно.const markdown = `
# Основной заголовок
> Цитата с **выделением**:
> - Первый пункт
> - Второй пункт
`;
const tokens = marked.lexer(markdown);
const renderer = new marked.Renderer();
renderer.strong = text => `<strong class="highlight">${text}</strong>`;
renderer.blockquote = text => `<blockquote class="quote-block">${text}</blockquote>`;
const html = marked.parser(tokens, { renderer, gfm: true });
console.log(html);
В результате получаем полностью кастомизированный HTML с сохранением вложенной структуры и стилизованными элементами.
marked.parser — это мощный инструмент для детального
контроля над конвертацией Markdown в HTML. Правильное использование
токенов и Renderer позволяет создавать гибкие и расширяемые решения для
веб-приложений, CMS и других проектов, где важна точность и структура
HTML.