Описание Api TextTools

Библиотека TextTools - Документация для пользователей

Обзор

TextTools - это библиотека для обработки текста, предоставляющая более 100 функций для манипуляции, преобразования и анализа текстовых данных. Все функции доступны через объект `TextTools` при использовании в скриптах.

Базовые операции

Очистка текста

// Удаление HTML тегов
TextTools.stripHtml(html)

// Удаление эмодзи и символов Unicode Emoji
TextTools.removeEmojis(text)

// Удаление диакритических знаков
TextTools.removeDiacritics(text)

// Удаление пустых строк (только пробелы/табы)
TextTools.removeEmptyLines(text)

// Удаление дубликатов строк
TextTools.removeDuplicateLines(text)

// Удаление только смежных дубликатов строк
TextTools.removeAdjacentDuplicates(text)

// Удаление управляющих символов и ANSI escape кодов
TextTools.removeControlChars(text)

// Удаление лишних пробелов
TextTools.removeExtraSpaces(text)

// Оставить только дублирующиеся строки
TextTools.keepOnlyDuplicates(text)

Работа с кавычками

// Замена кавычек различных типов
// fromType: 'smart' | 'straight' | 'backtick' | 'angle' | 'all'
// toType: 'smart' | 'straight' | 'backtick' | 'angle'
TextTools.replaceQuotes(text, fromType, toType)

// Замена умных кавычек на прямые
TextTools.replaceSmartQuotes(text)

Трансформация текста

// Замена табуляций на пробелы (по умолчанию 2 пробела на таб)
TextTools.tabsToSpaces(text, spacesPerTab = 2)

// Замена пробелов на табуляции (по умолчанию 2 пробела = 1 таб)
TextTools.spacesToTabs(text, tabSize = 2)

// Увеличение/уменьшение чисел в тексте
TextTools.incrementNumbers(text, increment = 1)

// Паддинг строк
TextTools.padString(text, length, direction = 'start', padChar = ' ')

Разделение и объединение текста

// Разделение строк по разделителю (строке или regex)
TextTools.splitLines(text, delimiter = /\s+/, treatAsRegex = false)

// Объединение строк
TextTools.joinLines(lines, delimiter = ' ', joinEvery = 2)

Извлечение с помощью regex

// Извлечение информации с помощью регулярных выражений
TextTools.extractWithRegex(text, pattern, replacement = '$0')

Подсчет и статистика

// Подсчет вхождений строк
TextTools.countLineOccurrences(text)

// Форматирование подсчета вхождений в читаемый вид
TextTools.formatOccurrences(counts)

// Подсчет слов и символов
TextTools.countStats(text)

// Выбор случайных строк
TextTools.selectRandomLines(text, count)

Фильтрация

// Удаление или сохранение только чисел
TextTools.filterNumbers(text, keepNumbers = true)

Извлечение данных ()

Извлечение контактной информации

// Извлечение email адресов
// format: 'list' | 'csv' | 'json'
// removeDuplicates: boolean
TextTools.extractEmails(text, format = 'list', removeDuplicates = true)

// Извлечение телефонных номеров
TextTools.extractPhoneNumbers(text, format = 'list', removeDuplicates = true)

Извлечение URL и ссылок

// Извлечение URL (основная версия)
// normalizeUrls: нормализует URL (добавляет протокол, убирает www и т.д.)
TextTools.extractUrls(text, format = 'list', removeDuplicates = true, normalizeUrls = true)

// Более агрессивное извлечение URL
TextTools.extractUrlsAdvanced(text, format = 'list', removeDuplicates = true, normalizeUrls = true)

// Извлечение ссылок Markdown
TextTools.extractMarkdownLinks(text, format = 'list', removeDuplicates = true)

Извлечение специальных данных

// Извлечение хештегов
// sortByFrequency: сортировать по частоте использования
TextTools.extractHashtags(text, format = 'list', removeDuplicates = true, sortByFrequency = false)

// Извлечение упоминаний (@username)
TextTools.extractMentions(text, format = 'list', removeDuplicates = true)

// Извлечение IP адресов
TextTools.extractIPAddresses(text, format = 'list', removeDuplicates = true)

// Извлечение MAC адресов
TextTools.extractMacAddresses(text, format = 'list', removeDuplicates = true)

// Извлечение дат
// dateFormat: формат даты ('YYYY-MM-DD', 'DD.MM.YYYY' и т.д.)
TextTools.extractDates(text, format = 'list', removeDuplicates = true, dateFormat = 'YYYY-MM-DD')

// Извлечение чисел
// includeDecimals: включать десятичные числа
// includeHex: включать шестнадцатеричные числа
TextTools.extractNumbers(text, format = 'list', removeDuplicates = true, includeDecimals = true, includeHex = true)

Работа с регистром ()

Преобразование регистра

// Преобразование регистра текста
// caseType: 'camel' | 'pascal' | 'snake' | 'kebab' | 'constant' | 'dot' | 
//           'title' | 'sentence' | 'sponge' | 'upper' | 'lower'
TextTools.changeTextCase(text, caseType)

// Быстрые методы для конкретных типов регистра
TextTools.reverseText(text)          // Реверс текста
TextTools.upperCase(text)           // Верхний регистр
TextTools.lowerCase(text)           // Нижний регистр
TextTools.titleCase(text)           // Заголовочный регистр
TextTools.sentenceCase(text)        // Предложный регистр

Вспомогательные функции

TextTools.countWords(text)          // Подсчет слов
TextTools.countGraphemes(text)      // Подсчет графем
TextTools.truncateText(text, length, ending = '...') // Обрезка текста
TextTools.wordWrapText(text, width = 80)  // Перенос слов
TextTools.stripHtmlTags(text)       // Удаление HTML тегов
TextTools.escapeHtml(text)          // Экранирование HTML
TextTools.unescapeHtml(text)        // Разэкранирование HTML
TextTools.trimString(text)          // Обрезка пробелов

Форматирование ()

Форматирование чисел и строк

// Форматирование чисел с разделителями (запятые для тысяч)
TextTools.addCommasToNumbers(text)

// Добавление номеров строк
// style: 'number' | 'letter' | 'roman'
TextTools.addLineNumbers(text, style = 'number')

Выравнивание и перенос

// Выравнивание текста по центру
TextTools.centerAlign(text, maxWidth = 80)

// Перенос слов по заданной ширине
TextTools.wordWrap(text, width = 80)

Таблицы и обертка

// Форматирование как таблица
TextTools.formatAsTable(text, delimiter = /\t/)

// Префикс, суффикс и обертка для строк
TextTools.wrapLines(text, prefix = '', suffix = '', wrapPrefix = '', wrapSuffix = '')

📊 Работа с CSV ()

// Преобразование CSV в таблицу Markdown
TextTools.csvToMarkdownTable(csvText, delimiter = ',')

// Сортировка CSV по колонке
TextTools.sortCsvByColumn(csvText, columnIndex = 0, delimiter = ',')

// Фильтрация CSV по значению в колонке
TextTools.filterCsvByColumn(csvText, columnIndex, filterValue, delimiter = ',')

Кодирование ()

Основные операции кодирования

// Кодирование/декодирование текста
// operation: 'url-encode' | 'url-decode' | 'html-encode' | 'html-decode' | 
//            'base64-encode' | 'base64-decode'
TextTools.encodeDecodeText(text, operation)

// Экранирование для JSON
TextTools.escapeJson(text)

// Разэкранирование JSON
TextTools.unescapeJson(text)

Работа с JWT

// Декодирование JWT токена
TextTools.decodeJwt(token)

// Валидация JWT токена (базовая проверка структуры)
TextTools.validateJwt(token)

Сравнение текстов ()

// Сравнение двух текстов и вывод различий
TextTools.compareTexts(text1, text2)

// Подсчет процента схожести двух текстов
TextTools.calculateTextSimilarity(text1, text2)

// Поиск общих строк в двух текстах
TextTools.findCommonLines(text1, text2)

JSON операции ()

Форматирование и валидация

// Форматирование JSON с красивым выводом
// indentSize: размер отступа (по умолчанию 2)
// sortKeys: сортировать ключи алфавитно
TextTools.formatJson(text, indentSize = 2, sortKeys = false)

// Минификация JSON
TextTools.minifyJson(text, removeWhitespace = true, removeComments = true)

// Валидация JSON
TextTools.validateJson(text)

// Извлечение JSON из текста
TextTools.extractJson(text)

Конвертация форматов

// Конвертация JSON в другие форматы
// format: 'yaml' | 'csv' | 'xml' | 'toml'
TextTools.convertJsonTo(text, format)

// Выполнение JSON Path запроса
TextTools.jsonPathQuery(text, query, outputFormat = 'json')

Сортировка ()

// Сортировка строк
// order: 'asc' | 'desc'
// method: 'default' | 'length' | 'numeric' | 'ip' | 'semver' | 'word-count' | 'grapheme'
// caseSensitive: boolean
TextTools.sortLines(text, order = 'asc', method = 'default', caseSensitive = false)

// Перемешивание строк
TextTools.shuffleLines(text)

Генераторы ()

Генерация идентификаторов

// Генерация GUID/UUID
// format: 'default' | 'no-dashes' | 'braces' | 'parens'
TextTools.generateGuid(format = 'default')

Генерация чисел

// Вставка последовательности чисел
// format: 'decimal' | 'hex' | 'roman'
TextTools.insertNumberSequence(count, start = 1, step = 1, format = 'decimal', uppercaseHex = true)

// Генерация случайных чисел
// type: 'single' | 'unique'
// format: 'decimal' | 'hex' | 'binary'
TextTools.generateNumbers(min = 1, max = 100, count = 10, type = 'single', format = 'decimal')

Работа с датами

// Вставка временных меток
// format: 'iso' | 'unix' или произвольный формат
TextTools.insertTimestamp(format = 'iso')

// Форматирование даты в произвольный формат
// format: строка с токенами (YYYY, MM, DD, HH, mm, ss и т.д.)
TextTools.formatDate(date, format)

Конвертация систем счисления

// Конвертация чисел между системами
// from: 'dec' | 'hex'
// to: 'dec' | 'hex'
TextTools.convertNumberSystem(value, from, to)

Генерация паролей ()

// Генерация безопасного пароля
// excludeSimilar: исключать похожие символы (I/l/1, O/0 и т.д.)
TextTools.generatePassword(
  length = 16,
  includeUppercase = true,
  includeLowercase = true,
  includeNumbers = true,
  includeSymbols = true,
  excludeSimilar = false
)

Очистка вывода LLM ()

// Очистка текста от специфических артефактов LLM
TextTools.cleanLlmOutput(text)

// Извлечение кода из текста LLM (выделяет блоки кода)
TextTools.extractCodeFromLlmOutput(text)

// Удаление только LLM-артефактов без изменения форматирования
TextTools.removeLlmArtifacts(text)

Поиск и замена ()

// Применение поиска и замены с продвинутыми опциями
TextTools.applyFindReplace(text, options)

// Проверка валидности регулярного выражения
TextTools.isValidRegex(pattern)

HTML в Markdown ()

// Преобразование HTML в Markdown
TextTools.htmlToMarkdown(html)

// Преобразование HTML в чистый текст
TextTools.htmlToText(html)

// Валидация и очистка HTML
TextTools.validateAndCleanHtml(html)

// Извлечение чистого текста (самый агрессивный режим)
TextTools.extractPlainText(html)

// HTML в Markdown с расширенными опциями
TextTools.htmlToMarkdownExtended(html, options)

Вспомогательные функции ()

// Преобразование в римские числа
TextTools.toRoman(num)

// Преобразование строк в различные форматы
TextTools.camelCase(str)      // camelCase
TextTools.snakeCase(str)      // snake_case
TextTools.kebabCase(str)      // kebab-case
TextTools.pascalCase(str)     // PascalCase
TextTools.dotCase(str)        // dot.case
TextTools.constantCase(str)   // CONSTANT_CASE
TextTools.startCase(str)      // Start Case
TextTools.slugify(text)       // slug-case (для URL)
TextTools.spongeCase(str)     // SpOnGe CaSe
TextTools.upperFirst(str)     // Первая буква заглавная

// Нормализация Unicode
// form: 'NFC' | 'NFD' | 'NFKC' | 'NFKD'
TextTools.normalizeUnicode(text, form = 'NFC')

Примеры использования

Пример 1: Очистка и форматирование текста

let text = "Пример текста с  HTML тегами <b>и числами 123456</b>";

// Очистка HTML
text = TextTools.stripHtml(text);

// Форматирование чисел
text = TextTools.addCommasToNumbers(text);

// Результат: "Пример текста с  HTML тегами и числами 123,456"

Пример 2: Извлечение данных

const content = "Контакты: email@example.com, тел: +7-999-123-45-67, сайт: https://example.com";

const emails = TextTools.extractEmails(content, 'list', true);
const phones = TextTools.extractPhoneNumbers(content, 'list', true);
const urls = TextTools.extractUrls(content, 'list', true, true);

Пример 3: Преобразование форматов

const jsonText = '{"name": "John", "age": 30}';

// JSON → YAML
const yaml = TextTools.convertJsonTo(jsonText, 'yaml');

// JSON → CSV
const csv = TextTools.convertJsonTo(jsonText, 'csv');

// HTML → Markdown
const markdown = TextTools.htmlToMarkdown('<h1>Заголовок</h1><p>Текст</p>');

Пример 4: Работа с текстом

const text = "пример текста для обработки";

// Изменение регистра
const camel = TextTools.changeTextCase(text, 'camel');    // примерТекстаДляОбработки
const snake = TextTools.changeTextCase(text, 'snake');    // пример_текста_для_обработки
const title = TextTools.changeTextCase(text, 'title');    // Пример Текста Для Обработки

// Подсчет статистики
const stats = TextTools.countStats(text);
// { characters: 27, charactersNoSpaces: 23, words: 4, lines: 1, sentences: 1, paragraphs: 1 }

pipe для скриптов

Базовое использование

`pipe` позволяет создавать компактные цепочки обработки текста в скриптах:

// Скрипт для очистки пользовательского ввода
const cleanInput = pipe(
  TextTools.stripHtml,
  TextTools.removeEmojis,
  TextTools.removeExtraSpaces,
  TextTools.changeTextCase.bind(null, 'lower')
)(userInput);

Быстрые рецепты

Очистка данных

// Очистить HTML и нормализовать текст
const sanitize = pipe(
  TextTools.stripHtml,
  TextTools.removeControlChars,
  (t) => TextTools.changeTextCase(t, 'sentence')
);

Извлечение информации

// Извлечь все контакты из текста
const extractContacts = pipe(
  (t) => ({
    emails: TextTools.extractEmails(t),
    phones: TextTools.extractPhoneNumbers(t),
    urls: TextTools.extractUrls(t)
  }),
  JSON.stringify,
  (t) => TextTools.formatJson(t, 2)
);

Конвертация форматов

// CSV → Markdown таблица
const csvToMd = pipe(
  (csv) => TextTools.sortCsvByColumn(csv, 0),
  TextTools.csvToMarkdownTable
);

// HTML → Markdown
const htmlToMd = pipe(
  TextTools.validateAndCleanHtml,
  TextTools.htmlToMarkdown
);

Полезные комбинации для скриптов

// Готовые цепочки для частых задач
const scripts = {
  // Для социальных сетей
  social: pipe(
    TextTools.stripHtmlTags,
    (t) => TextTools.truncateText(t, 280),
    TextTools.extractHashtags
  ),
  
  // Для SEO
  seo: pipe(
    TextTools.stripHtml,
    (t) => TextTools.changeTextCase(t, 'lower'),
    TextTools.slugify,
    (t) => TextTools.truncateText(t, 60)
  ),
  
  // Для логов
  logClean: pipe(
    TextTools.removeEmptyLines,
    TextTools.removeDuplicateLines,
    (t) => TextTools.sortLines(t, 'asc', 'timestamp')
  ),
  
  // Для JSON
  jsonClean: pipe(
    TextTools.extractJson,
    TextTools.formatJson.bind(null, 2, true)
  )
};

Шорткаты для быстрых скриптов

// Создайте алиасы для частых операций
const $ = {
  html: TextTools.stripHtml,
  emoji: TextTools.removeEmojis,
  trim: TextTools.removeExtraSpaces,
  lower: (t) => TextTools.changeTextCase(t, 'lower'),
  upper: (t) => TextTools.changeTextCase(t, 'upper'),
  stats: TextTools.countStats
};

// Компактные скрипты
const quickScript = pipe(
  $.html,
  $.emoji,
  $.lower,
  $.trim
)(input);

Примеры готовых скриптов

1. Скрипт обработки email-рассылки

const processEmailContent = pipe(
  TextTools.stripHtml,
  (t) => TextTools.truncateText(t, 500),
  TextTools.addLineNumbers('number'),
  TextTools.wordWrapText.bind(null, 72)
);

2. Скрипт анализа текста

const analyzeText = pipe(
  (t) => {
    const stats = TextTools.countStats(t);
    const emails = TextTools.extractEmails(t).split('\n').length;
    return `📊 Анализ: ${stats.words} слов, ${emails} email`;
  }
);

3. Скрипт миграции контента

const migrateContent = pipe(
  TextTools.htmlToMarkdown,
  (md) => md.replace(/<img[^>]+>/g, '![image]'),
  TextTools.removeEmptyLines
);

Советы для скриптов

  1. Делайте цепочки короткими (3-5 операций)
  2. Используйте `bind()` для параметров
  3. Сохраняйте часто используемые цепочки
  4. Комбинируйте с другими функциями
// ❌ Слишком длинно
const badScript = pipe(/* 10+ операций */);

// ✅ Разделите на части
const clean = pipe(TextTools.stripHtml, TextTools.removeEmojis);
const format = pipe(
  (t) => TextTools.changeTextCase(t, 'title'),
  TextTools.wordWrapText.bind(null, 80)
);

const goodScript = (input) => format(clean(input));

`pipe` идеально подходит для создания чистых, читаемых скриптов обработки текста без лишнего кода.

Советы по использованию

  1. Обработка ошибок: Большинство функций обрабатывают ошибки и возвращают исходный текст в случае проблем.

  2. Производительность: Для больших текстов используйте более простые операции и избегайте сложных регулярных выражений.

  3. Unicode поддержка: Все функции корректно работают с Unicode символами, включая эмодзи и кириллицу.

  4. Контекст выполнения: Функции работают как в браузере, так и в Node.js окружении.