umbot
    Preparing search index...

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

    Класс предоставляет статические методы для:

    • Обрезки текста
    • Проверки URL
    • Определения согласия/отрицания
    • Поиска совпадений
    • Работы с окончаниями слов
    • Проверки схожести текстов
    // Обрезка текста (итоговая длина = size, включая троеточие)
    Text.resize('Длинный текст', 5); // -> 'Дл...'

    // Проверка URL
    Text.isUrl('http://localhost'); // -> true

    // Определение согласия
    Text.isSayTrue('да, согласен'); // -> true

    // Поиск совпадений
    Text.isSayText(['привет', 'здравствуйте'], 'привет мир'); // -> true

    // Работа с окончаниями
    Text.getEnding(5, ['яблоко', 'яблока', 'яблок']); // -> 'яблок'

    // Проверка схожести
    Text.textSimilarity('привет', 'привт', 80); // -> { status: true, percent: ~91, ... }
    Index

    Constructors

    Methods

    • Очищает кэш регулярных выражений (только кэш строковых паттернов; WeakMap для RegExp-объектов очищать не нужно — записи удаляются сборщиком мусора). Стоит вызывать только в крайних случаях

      Returns void

    • Возвращает правильное окончание слова в зависимости от числа

      Parameters

      • num: number

        Число для определения окончания

      • titles: readonly string[]

        Варианты окончаний ['один', 'два-четыре', 'пять-десять']

      • Optionalindex: number | null = null

        Принудительный индекс варианта окончания

      Returns string | null

      Выбранное окончание или null, если не найдено

      const titles = ['яблоко', 'яблока', 'яблок'];
      Text.getEnding(1, titles); // -> 'яблоко'
      Text.getEnding(2, titles); // -> 'яблока'
      Text.getEnding(5, titles); // -> 'яблок'

      // Принудительный выбор формы
      Text.getEnding(5, titles, 0); // -> 'яблоко'
    • Возвращает скомпилированное регулярное выражение для слота команды.

      Использует те же кэши, что и isSayText (WeakMap для RegExp-объектов, кэш с вытеснением наименее используемых паттернов для строковых шаблонов): повторные вызовы не компилируют регулярку заново. Предназначено для извлечения групп совпадения (exec) после того, как команда уже сработала — например, для заполнения controller.match.

      Parameters

      • slot: TPatternRegExp

        Слот команды: RegExp или строка-паттерн

      • OptionaluseDirectRegExp: boolean = false

        Не нормализовать и не кэшировать RegExp

      • OptionalcustomReg: RegExpConstructor = undefined

        Кастомный движок RegExp (например, re2)

      Returns RegExp | null

      Скомпилированное выражение или null, если слот не строка и не RegExp

      const reg = Text.getMatchRegExp(/(\d+)/);
      const match = reg?.exec('заказ 5'); // match?.[1] === '5'
    • Возвращает случайную строку из массива или исходную строку

      Parameters

      • Optionalstr: TPattern

        Строка или массив строк

      Returns string

      Выбранная строка

      Text.getText('привет'); // -> 'привет'
      Text.getText(['привет', 'здравствуйте']); // -> случайная строка из массива
    • Определяет наличие в тексте отрицания пользователя

      Parameters

      • text: string

        Проверяемый текст

      Returns boolean

      true, если найдено отрицание

      Распознает следующие паттерны:

      • "нет"
      • "неа"
      • "не"
      Text.isSayFalse('нет, не хочу'); // -> true
      Text.isSayFalse('да, хочу'); // -> false
    • Проверяет наличие совпадений в тексте

      Parameters

      • find: TPatternReg

        Искомый текст или массив текстов

      • text: string

        Исходный текст для поиска

      • OptionalisPattern: boolean = false

        Использовать ли регулярные выражения

      • OptionaluseDirectRegExp: boolean = false

        Использовать исходные RegExp напрямую без нормализации и кэширования. Стоит использовать только в крайних случаях.

      • OptionalcustomReg: RegExpConstructor = undefined

        Произвольная реализация для обработки регулярных выражений

      Returns boolean

      true, если найдено совпадение

      // Поиск подстроки
      Text.isSayText('привет', 'привет мир'); // -> true

      // Поиск одной из подстрок
      Text.isSayText(['привет', 'здравствуйте'], 'привет мир'); // -> true

      // Поиск по регулярному выражению
      Text.isSayText(['\\bпривет\\b', '\\bмир\\b'], 'привет мир', true); // -> true
    • Определяет наличие в тексте согласия пользователя

      Parameters

      • text: string

        Проверяемый текст

      Returns boolean

      true, если найдено подтверждение

      Распознает следующие паттерны:

      • "да"
      • "конечно"
      • "согласен"/"согласна" и производные (шаблон "соглас…")
      • "подтверждаю"/"подтверди" и производные (шаблон "подтвер…")
      Text.isSayTrue('да, согласен'); // -> true
      Text.isSayTrue('нет, не хочу'); // -> false
    • Проверяет, является ли строка URL-адресом

      Parameters

      • link: string

        Проверяемая строка

      Returns boolean

      true, если строка является URL-адресом

      Text.isUrl('http://localhost'); // -> true
      Text.isUrl('не url'); // -> false
    • Обрезает текст до указанной длины

      Обрезка выполняется по границе символа: суррогатные пары (эмодзи) не разрываются, поэтому результат остаётся валидной строкой для отправки платформе.

      Parameters

      • text: string | null

        Исходный текст

      • Optionalsize: number = 950

        Максимальная длина результата

      • OptionalisEllipsis: boolean = true

        Добавлять ли многоточие в конце

      Returns string

      Обрезанный текст

      Text.resize('Длинный текст', 6); // -> 'Дли...'
      Text.resize('Длинный текст', 6, false); // -> 'Длинны'
      Text.resize('aaa😀bbb', 4, false); // -> 'aaa' (эмодзи не разрезано пополам)
    • Заменяет ключ в тексте на значение

      Parameters

      • key: string

        Ключ для замены

      • value: string | string[]

        Значение для замены (из массива выбирается случайный вариант)

      • text: string

        Исходный текст

      Returns string

      Текст с заменённым ключом

      Text.textReplace('#name#', 'Иван', 'Привет, #name#!'); // -> 'Привет, Иван!'
      Text.textReplace('#name#', ['Иван', 'Пётр'], 'Привет, #name#!'); // -> случайное имя
    • Проверяет схожесть текстов и возвращает результат сравнения

      Parameters

      • origText: string

        Оригинальный текст для сравнения

      • compareText: TPattern

        Текст или массив текстов для сравнения

      • Optionalthreshold: number = 80

        Минимальный процент схожести для положительного результата

      Returns ITextSimilarity

      Результат сравнения текстов

      // Сравнение с одним текстом
      Text.textSimilarity('привет', 'привт', 80);
      // -> {
      // status: true,
      // index: 0,
      // percent: ~91,
      // text: 'привт'
      // }

      // Сравнение с массивом текстов
      Text.textSimilarity('привет', ['привт', 'здравствуйте'], 80);
      // -> {
      // status: true,
      // index: 0,
      // percent: ~91,
      // text: 'привт'
      // }