string
Макрос !{string} предоставляет набор функций для работы со строками: поиск, извлечение, замена, форматирование и многое другое.
Где используется:
- Обработка текста от пользователя
- Форматирование вывода
- Извлечение данных из строк
💡 Совет: Макрос удобен для парсинга команд, проверки форматов, обрезки длинных сообщений.
Синтаксис
!{string.функция|
параметр1: значение1;
параметр2: значение2;
}
Оглавление функций
| Функция | Описание |
|---|---|
| contains | Проверка вхождения подстроки |
| index | Поиск позиции подстроки |
| cut | Вырезание части строки |
| reverse | Разворот строки |
| truncate | Обрезка строки до длины |
| case | Изменение регистра |
| split | Разделение строки на массив |
| join | Объединение массива в строку |
| trim | Удаление символов по краям |
| replace | Замена подстроки |
| count | Подсчёт вхождений |
| repeat | Повторение строки |
string.contains
Проверяет вхождение строки (или символов) в текст.
Параметры
Параметр Тип Обязательный Описание
text Строка ✅ Да Исходная строка search Строка ✅ Да Искомое значение type Строка ❌ Нет Тип поиска (substring, chars, prefix, suffix)
Типы поиска
Тип Описание Пример (text="Hello")
substring (по умолчанию) Поиск подстроки "ell" → true chars Поиск любого из символов "abc" → false (нет a,b,c) prefix Проверка начала строки "Hel" → true suffix Проверка конца строки "llo" → true
Примеры
Поиск подстроки
!{string.contains|text: "Hello world"; search: "world";}
Результат: true
Поиск символов
!{string.contains|text: "Hello"; type: chars; search: "abc";}
Результат: false
Проверка префикса
!{string.contains|text: "prefix-test"; type: prefix; search: "prefix";}
Результат: true
Проверка суффикса
!{string.contains|text: "test-suffix"; type: suffix; search: "suffix";}
Результат: true
string.index
Находит позицию первого или последнего вхождения подстроки.
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| text | Строка | ✅ Да | Исходная строка |
| search | Строка | ✅ Да | Искомая подстрока |
| type | Строка | ❌ Нет | Тип поиска (first, last) |
| mode | Строка | ❌ Нет | Режим индексации (utf8, byte) |
Режимы индексации
| Режим | Описание |
|---|---|
| utf8 (по умолчанию) | По символам UTF-8 |
| byte | По байтам |
Примеры
Поиск первого вхождения
!{string.index|text: "Hello world"; search: "o";}
**Результат: 4 (символ 'o' на позиции 4)
Поиск последнего вхождения
!{string.index|text: "Hello world"; search: "o"; type: last;}
Результат: 7
Поиск с UTF-8 индексацией
!{string.index|text: "Привет мир"; search: "мир";}
Результат: 7
Поиск с байтовой индексацией
!{string.index|text: "Привет мир"; mode: byte; search: "мир";}
Результат: 13 (т.к. "Привет " занимает 13 байт в UTF-8)
⚠️ Примечание: Индексация начинается с 0. Если подстрока не найдена, возвращается -1.
string.cut
Вырезает часть строки (диапазон или конкретный символ).
Параметры*
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| text | Строка | ✅ Да | Исходная строка |
| start | Число | ❌ Нет | Начальный индекс (включительно) |
| end | Число | ❌ Нет | Конечный индекс (не включительно) |
| index | Число | ❌ Нет | Индекс конкретного символа |
| mode | Строка | ❌ Нет | Режим индексации (utf8, byte) |
Примеры
Получение символа по индексу
!{string.cut|text: "Привет мир"; index: 2; mode: utf8;}
Результат: "и"
Вырезание с начального индекса до конца
!{string.cut|text: "Привет мир"; start: 7; mode: utf8;}
Результат: "мир"
Вырезание с начала до указанного индекса
!{string.cut|text: "Привет мир"; end: 6; mode: utf8;}
Результат: "Привет"
Вырезание части между индексами
!{string.cut|text: "Привет мир"; start: 0; end: 6; mode: utf8;}
Результат: "Привет"
⚠️ Примечание: Если указан index, параметры start и end игнорируются.
string.reverse
Разворачивает строку в обратном порядке.
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| text | Строка | ✅ Да | Исходная строка |
!{string.reverse|text: "Привет";}
Результат: "тевирП"
string.truncate
Обрезает строку до указанной длины с добавлением окончания.
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| text | Строка | ✅ Да | Исходная строка |
| length | Число | ✅ Да | Максимальная длина |
| suffix | Строка | ❌ Нет | Окончание обрезанной строки (по умолчанию "...") |
| type | Строка | ❌ Нет | Тип обрезки (word, symbol) |
| mode | Строка | ❌ Нет | Режим индексации (utf8, byte) |
Типы обрезки
| Тип | Описание |
|---|---|
| word (по умолчанию) | Обрезка по последнему полному слову |
| symbol | Обрезка строго по символам |
Примеры
Обрезка по словам с UTF-8 индексацией (по умолчанию)
!{string.truncate|text: "Очень длинная строка текста"; length: 12;}
Результат: "Очень длинная..."
Обрезка по символам с UTF-8 индексацией
!{string.truncate|text: "Очень длинная строка текста"; length: 12; type: symbol;}
Результат: "Очень длинна..."
Обрезка по байтам
!{string.truncate|text: "Очень длинная строка текста"; length: 12; type: symbol; mode: byte;}
Результат: "Оче..." (т.к. кириллические символы занимают по 2 байта)
С изменённым окончанием
!{string.truncate|text: "Очень длинная строка текста"; length: 12; suffix: "…";}
Результат: "Очень длинная…"
string.case
Изменяет регистр строки.
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| text | Строка | ✅ Да | Исходная строка |
| type | Строка | ❌ Нет | Тип преобразования (lower, upper) |
Типы преобразования
| Тип | Описание |
|---|---|
| lower (по умолчанию) | Нижний регистр |
| upper | Верхний регистр |
Пример
!{string.case|text: "Строка для преобразования"; type: upper;}
Результат: "СТРОКА ДЛЯ ПРЕОБРАЗОВАНИЯ"
string.split
Разделяет строку на массив подстрок по указанному разделителю.
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| text | Строка | ✅ Да | Исходная строка |
| separator | Строка | ❌ Нет | Разделитель (по умолчанию — пробельные символы) |
Возвращает
Массив строк в формате JSON.
Примеры
Разделение по запятой
!{string.split|text: "red,green,blue"; separator: ,;}
Результат: ["red", "green", "blue"]
Разделение по пробелам (separator не указан)
!{string.split|text: "The quick brown fox";}
Результат: ["The", "quick", "brown", "fox"]
Разделение по нескольким символам
!{string.split|text: "1->2->3"; separator: "->";}
Результат: ["1", "2", "3"]
string.join
Объединяет массив строк через указанный разделитель.
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| list | Массив | ✅ Да | Массив строк в формате JSON |
| separator | Строка | ❌ Нет | Разделитель (по умолчанию — пустая строка) |
Пример
!{string.join|list: ["строка1", "строка2", "строка3"]; separator: ", ";}
Результат: "строка1, строка2, строка3"
string.trim
Удаляет указанные символы с начала и/или конца строки.
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| text | Строка | ✅ Да | Исходная строка |
| type | Строка | ❌ Нет | Тип удаления (both, left, right, space) |
| search | Строка | ❌ Нет* | Символы для удаления |
- Обязателен для типов both, left, right.
Типы удаления
| Тип | Описание |
|---|---|
| both | (по умолчанию) Удаление с обоих концов |
| left | Удаление только слева |
| right | Удаление только справа |
| space | Удаление пробельных символов с обоих концов |
Примеры
Удаление пробелов
!{string.trim|text: " Строка с пробелами "; type: space;}
Результат: "Строка с пробелами"
Удаление конкретных символов слева
!{string.trim|text: "***Текст***"; type: left; search: "*";}
Результат: "Текст***"
string.replace
Заменяет подстроки в тексте.
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| text | Строка | ✅ Да | Исходная строка |
| old | Строка | ✅ Да | Подстрока для замены |
| new | Строка | ✅ Да | Строка замены (может быть пустой) |
| type | Строка | ❌ Нет | Тип замены (first, all, count) |
| count | Число | ❌ Нет* | Количество замен (для type: count) |
- Обязателен для type: count.
Типы замены
| Тип | Описание |
|---|---|
| first (по умолчанию) | Замена только первого вхождения |
| all | Замена всех вхождений |
| count | Замена указанного количества вхождений |
Примеры
Замена первого вхождения
!{string.replace|text: "Привет, мир! Привет!"; old: "Привет"; new: "Здравствуй";}
Результат: "Здравствуй, мир! Привет!"
Замена всех вхождений
!{string.replace|text: "Привет, мир! Привет!"; old: "Привет"; new: "Здравствуй"; type: all;}
Результат: "Здравствуй, мир! Здравствуй!"
Замена указанного количества вхождений
!{string.replace|text: "Привет, Привет, Привет!"; old: "Привет"; new: "Здравствуй"; type: count; count: 2;}
Результат: "Здравствуй, Здравствуй, Привет!"
string.count
Подсчитывает количество непересекающихся вхождений подстроки.
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| text | Строка | ✅ Да | Исходная строка |
| search | Строка | ✅ Да | Искомая подстрока |
Пример
!{string.count|text: "Привет, мир! Привет!"; search: "Привет";}
Результат: "2"
string.repeat
Повторяет строку указанное количество раз.
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| text | Строка | ✅ Да | Исходная строка |
| count | Число | ✅ Да | Количество повторов |
Пример
!{string.repeat|text: "Привет!"; count: 3;}
Результат: "Привет!Привет!Привет!"
Частые ошибки и их решение
| Ошибка | Причина | Решение |
|---|---|---|
| index или cut возвращает -1 | Подстрока или индекс не найдены | Проверьте наличие подстроки через contains |
| truncate обрезает слишком коротко | Неверный режим mode или type | Используйте type: word для обрезки по словам |
| split возвращает неожиданный массив | Неверный разделитель | Убедитесь, что разделитель точно соответствует |
| replace заменяет только первое вхождение | Не указан type: all | Добавьте type: all для замены всех вхождений \ |
Быстрые ответы (шпаргалка)
Проверить, содержит ли текст слово
!{string.contains|text: ${text}; search: "слово"}
Найти позицию символа
!{string.index|text: ${text}; search: "?"}
Взять первые 10 символов
!{string.cut|text: ${text}; end: 10}
Обрезать до 20 символов с "..."
!{string.truncate|text: ${text}; length: 20}
Перевести в верхний регистр
!{string.case|text: ${text}; type: upper}
Разбить строку по запятым
!{string.split|text: ${text}; separator: ","}
Удалить пробелы по краям
!{string.trim|text: ${text}; type: space}
Заменить все пробелы на подчёркивания
!{string.replace|text: ${text}; old: " "; new: "_"; type: all}
Узнать, сколько раз встречается слово
!{string.count|text: ${text}; search: "слово"}
Повторить строку 5 раз
!{string.repeat|text: "Привет"; count: 5}