Библиотека Marked предоставляет мощный инструмент
для преобразования Markdown в HTML в среде JavaScript. Одной из ключевых
возможностей является поддержка различных типов текста, включая жирный,
который обозначается в Markdown двойными звёздочками
(**текст**) или двойными подчёркиваниями
(__текст__).
В Markdown жирный текст оформляется следующим образом:
**Это жирный текст**
__И это тоже жирный текст__
При обработке Marked такие конструкции преобразуются в HTML-теги
<strong>:
<strong>Это жирный текст</strong>
<strong>И это тоже жирный текст</strong>
Ключевой момент: Marked строго следует стандарту
CommonMark, поэтому правильное закрытие символов ** или
__ обязательно. Несовпадение количества символов приведёт к
тому, что текст останется обычным.
marked.parseБазовый способ рендеринга Markdown в HTML через Marked выглядит следующим образом:
import { marked } from 'marked';
const markdownText = "**Жирный текст** и обычный текст";
const html = marked.parse(markdownText);
console.log(html);
// Вывод: <p><strong>Жирный текст</strong> и обычный текст</p>
Объяснение работы:
marked.parse принимает строку Markdown и возвращает
HTML.<strong>.Marked позволяет полностью настраивать процесс рендеринга через объект Renderer. Для жирного текста можно задать собственное оформление:
import { marked } from 'marked';
const renderer = new marked.Renderer();
renderer.strong = (text) => {
return `<b class="custom-bold">${text}</b>`;
};
const markdownText = "**Кастомный жирный текст**";
const html = marked.parse(markdownText, { renderer });
console.log(html);
// Вывод: <p><b class="custom-bold">Кастомный жирный текст</b></p>
Особенности подхода:
renderer.strong вызывается для каждого блока
жирного текста.При работе с Markdown важно учитывать XSS-атаки. Marked предоставляет
опцию sanitize, хотя начиная с последних версий
рекомендуется использовать отдельные библиотеки для очистки HTML,
например, DOMPurify.
import { marked } from 'marked';
import DOMPurify from 'dompurify';
const markdownText = "**Жирный текст** с потенциальным <script>alert('xss')</script>";
const dirtyHtml = marked.parse(markdownText);
const cleanHtml = DOMPurify.sanitize(dirtyHtml);
console.log(cleanHtml);
// Вывод: <p><strong>Жирный текст</strong> с потенциальным </p>
Важный момент: даже простой жирный текст может находиться рядом с опасными элементами. Обязательная очистка HTML защищает приложение.
**Жирный и _курсивный_ текст**
Результат с Marked:
<p><strong>Жирный и <em>курсивный</em> текст</strong></p>
<strong> и Markdown:**Жирный <span class="highlight">текст</span>**
Будет корректно преобразовано в HTML, сохраняя стили span внутри жирного текста.
** для жирного текста, чтобы сохранить
совместимость с CommonMark.Marked предоставляет гибкую систему рендеринга жирного текста,
позволяя создавать как стандартный HTML <strong>, так
и полностью кастомизированные решения с безопасной обработкой.