Инструмент разворота строки
Быстрый разворот текстовой строки с поддержкой различных режимов
Выберите способ разворота
Что такое разворот строки?
String Reverse меняет порядок символов текста и выводит строку в обратном направлении. Идея простая, но реальный текст сложнее, чем ASCII-буквы: Unicode-символы, emoji, комбинируемые акценты, переносы строк, пробелы и письменности справа налево могут вести себя иначе в зависимости от подсчета символов. Инструмент полезен для текстовых экспериментов, проверки палиндромов, небольших головоломок, отладки строк, обучения и поиска скрытых пробелов или суффиксов. Это не криптографическое скрытие и не безопасная маскировка чувствительных данных. Если ввод содержит составные emoji или символы из нескольких code points, результат нужно проверить внимательно. Для опубликованного или многоязычного контента результат нужно проверить по языку, charset, контексту и edge cases.
Как использовать
Основные операции
- Введите или вставьте текст для переворачивания в левое поле
- Выберите режим (перевернуть всё, перевернуть слова и т. д.)
- Справа сразу отображается перевёрнутый результат
- Нажмите «Копировать» для копирования или «Поменять местами», чтобы использовать результат как входные данные
Обработка текста
- Переворачивание обычного текста простое, но эмодзи, комбинирующие диакритические знаки и языки с письмом справа налево могут дать неожиданный визуальный эффект.
- Для кода, URL или структурированных данных переворачивайте только нужный фрагмент, а не весь текст целиком.
Применение
Технический принцип
Разворот на уровне символов использует spread-синтаксис: [...str].reverse().join(''). Оператор spread перебирает строку как последовательность Unicode code points, что корректно обрабатывает символы за пределами базовой многоязычной плоскости, занимающие два блока UTF-16 (суррогатные пары). Наивная альтернатива str.split('').reverse().join('') разделяет по блокам кода и ломает любой эмодзи, например хлопушку 🎉 (U+1F389), ракету 🚀 (U+1F680) или любой символ выше U+FFFF. Графемные кластеры добавляют ещё один уровень. Воспринимаемый пользователем символ, например e с комбинирующим ударением (e + ◌́), эмодзи флага из двух региональных индикаторов или эмодзи семьи через ZWJ 👨👩👧 — это несколько code points. Разворот по code points по-прежнему переставляет фрагменты, поэтому эмодзи семьи превращается в три отдельные фигурки человека, а ударение смещается с базовой буквы. Intl.Segmenter с granularity: 'grapheme' — это стандартный способ итерации графемных кластеров и сохранения этих последовательностей целыми при развороте. На уровне операций стоимость составляет O(n) по количеству сегментов, где n — длина строки в code points или графемах в зависимости от выбранной сегментации. Двойной разворот возвращает исходную строку, что делает функцию полезной для проверки палиндромов. Для данных с обилием символов Unicode нормализация NFC (str.normalize('NFC')) перед разворотом сворачивает последовательности «базовый символ + комбинирующий знак» в предварительно составленные формы, когда они существуют, уменьшая неожиданности в выводе. Письменности справа налево, такие как арабский и иврит, хранятся в логическом порядке, но отображаются справа налево, поэтому развёрнутая арабская строка по-прежнему выглядит развёрнутой, хотя порядок данных изменился.
- Разворот по code points: [...str].reverse().join('') перебирает по code points и сохраняет суррогатные пары выше U+FFFF (большинство эмодзи)
- Ловушка наивного разворота: str.split('').reverse().join('') разделяет по блокам UTF-16 и повреждает любой символ выше U+FFFF
- Графемные кластеры: Intl.Segmenter({ granularity: 'grapheme' }) сохраняет комбинирующие знаки, последовательности флагов и ZWJ-эмодзи 👨👩👧 целыми
- Разворот на уровне слов: split(/\s+/), reverse, join(' '); сохраняет каждое слово внутри и только меняет порядок
- Сложность: O(n), где n — количество сегментов; двойной разворот возвращает исходную строку
- Нормализация NFC: str.normalize('NFC') сворачивает комбинирующие последовательности в предварительно составленные формы перед разворотом, когда они существуют
- Двунаправленный текст: арабский и иврит хранятся в логическом порядке; направление отображения определяется BiDi-слоем браузера, отдельно от разворота данных
Примеры
Реверс всех символов (базовый)
Режим: Реверс всего
Вход: hello world
Выход: dlrow olleh
Вход: 12345
Выход: 54321
Вход: A man a plan a canal Panama
Выход: amanaP lanac a nalp a nam AРеверс слов против реверса каждого слова
Вход: The quick brown fox
Режим: Реверс слов (только порядок слов)
-> fox brown quick The
Режим: Реверс каждого слова (буквы внутри слова)
-> ehT kciuq nworb xofПроверка палиндрома
Вход: racecar
Реверс всего -> racecar (то же самое, палиндром)
Вход: level
Реверс всего -> level (палиндром)
Вход: hello
Реверс всего -> olleh (НЕ палиндром)Безопасность Unicode и emoji
Вход: cafe (с комбинирующим акутом над e)
Наивный реверс: efac (акцент отрывается от буквы)
С учётом графем: efac (акцент остаётся прикреплённым)
Вход: family-emoji-ZWJ-sequence
Наивный реверс: разбивается на 3 отдельных emoji
Этот инструмент: сохраняет кластер целымРеверс порядка строк в файле журнала
Режим: Реверс порядка строк
Вход:
2026-06-10 09:00 startup
2026-06-10 09:05 login ok
2026-06-10 09:10 query slow
Выход (новые сначала):
2026-06-10 09:10 query slow
2026-06-10 09:05 login ok
2026-06-10 09:00 startupЧасто задаваемые вопросы
Что делает разворот строки?
Возвращает входной текст с символами в обратном порядке: «hello» → «olleh». Полезно для игрушечных шифров вроде ROT-13, проверки палиндромов, генерации зеркального текста или быстрых демонстраций работы с массивами в туториалах.
Корректно ли разворачиваются эмодзи и иероглифы CJK?
Большинство иероглифов CJK и базовых эмодзи разворачиваются корректно, потому что страница использует spread-оператор ([...text]), правильно обрабатывающий суррогатные пары UTF-16. Сложные последовательности эмодзи (семейные эмодзи, флаги, комбинации с тоном кожи) при развороте могут «развалиться», поскольку состоят из нескольких code points, которые разделяются.
Что происходит с комбинируемыми диакритическими знаками?
Символы, состоящие из базовой буквы и комбинируемых знаков (e + acute → é), разворачиваются как единая графема. Ввод в декомпозированной форме может потребовать предварительной нормализации — страница может выполнять NFC-нормализацию на входе. Видимый результат для естественного языка корректен в любом случае.
Чем разворот отличается от зеркального отражения?
Разворот — это смена порядка символов: «AB» → «BA». Зеркало — визуальный переворот: «AB», отображаемое как ⟨ƎA⟩, требует CSS transform или специальных символов. Страница меняет порядок символов, а не отражает пиксели. Для эффекта зеркального текста используйте CSS scaleX(-1).
Сохраняются ли переносы строк?
По умолчанию весь ввод разворачивается целиком, включая переносы строк, поэтому последняя строка оказывается первой. Включите «разворачивать каждую строку отдельно», чтобы менять порядок символов внутри строк, сохраняя порядок самих строк — удобно для визуальных эффектов на многострочном тексте.
Всегда ли развёрнутый текст читаем?
Языки с письмом слева направо (английский, китайский, японский) при развороте становятся нечитаемыми. Языки с письмом справа налево (арабский, иврит) могут стать неуклюже читаемыми, но тоже ломаются, потому что bidi-алгоритм борется с разворотом. Разворот — это в основном задача для кода или головоломок, а не реальный приём преобразования текста.
Загружается ли мой текст?
Нет. Разворот выполняется в вашем браузере. Вставленный текст не передаётся.