Метод marked.lexer является фундаментальной частью
библиотеки Marked для работы с Markdown в JavaScript.
Его основная задача — разбор Markdown-текста на токены,
которые затем могут быть обработаны для генерации HTML или других
форматов. Этот метод позволяет получить детализированное представление
структуры документа без немедленного рендеринга в HTML, что особенно
важно при построении собственных парсеров, редакторов и инструментов
анализа Markdown.
marked.lexer принимает на вход строку с
Markdown-контентом и возвращает массив
токенов. Каждый токен представляет собой объект с определённым
типом, содержимым и дополнительными свойствами, которые уточняют его
назначение.
Сигнатура метода:
const tokens = marked.lexer(src, options);
string).Каждый токен — это объект с обязательным полем type,
которое определяет его категорию. Основные типы токенов:
heading — заголовок. Содержит depth
(уровень заголовка) и text.
paragraph — абзац. Поле text
содержит исходный текст.
list — список. Поля:
ordered — булево значение, упорядоченный ли
список.items — массив токенов-элементов списка.list_item — элемент списка. Может содержать вложенные токены.
blockquote — блок цитаты. Поле
tokens содержит массив вложенных токенов.
code — блок кода. Поля text и
lang (язык программирования).
hr — горизонтальная линия.
table — таблица. Поля header
(массив заголовков), align (выравнивание колонок) и
rows (массив массивов ячеек).
Пример токена заголовка:
{
type: 'heading',
depth: 2,
text: 'Пример заголовка'
}
Настройки marked.lexer влияют на разбор Markdown.
Ключевые параметры:
boolean) — включает поддержку
расширенного синтаксиса GitHub (таблицы, задачи, автоматические
ссылки).boolean) — перенос строки в
Markdown преобразуется в <br> в HTML.boolean) — строгий режим,
близкий к оригинальному Markdown.boolean) — улучшенный
анализ списков.boolean) — преобразование
обычных кавычек и тире в типографские символы.Пример использования с опциями:
const tokens = marked.lexer('# Заголовок\n\nТекст абзаца', { gfm: true, breaks: true });
Лексер анализирует вложенность элементов. Например, список может
содержать абзацы, кодовые блоки или даже другие списки. Для доступа к
этим элементам используется поле tokens или
items:
const markdown = `
- Пункт 1
- Подпункт 1
- Пункт 2
`;
const tokens = marked.lexer(markdown);
console.log(tokens[0].items[0].tokens[0].text); // 'Подпункт 1'
Такой подход позволяет построить полное дерево документа для последующего анализа или кастомного рендеринга.
marked.lexer в реальных задачахmarked.parser.Простой пример:
const markdown = `
# Заголовок 1
Простой абзац текста.
`;
const tokens = marked.lexer(markdown);
console.log(tokens);
Результат:
[
{ type: 'heading', depth: 1, text: 'Заголовок 1' },
{ type: 'paragraph', text: 'Простой абзац текста.' }
]
Сложный пример с списком и блоком кода:
const markdown = `
- Пункт 1
- Пункт 2
\`\`\`js
console.log('Пример кода');
\`\`\`
`;
const tokens = marked.lexer(markdown);
Результат включает токены list с вложенными
list_item и code.
gfm и breaks, если
текст создается с использованием GitHub-совместимого Markdown.items и tokens.Метод marked.lexer обеспечивает гибкий и точный
разбор Markdown, создавая основу для любых инструментов,
работающих с этим форматом. Понимание структуры токенов и возможностей
настройки лексера позволяет строить собственные парсеры, редакторы и
анализаторы Markdown с высокой точностью и эффективностью.