ToolActToolAct

Инструмент разворота строки

Быстрый разворот текстовой строки с поддержкой различных режимов

Ввод
Символов: 0
Строк: 0
Результат
Символов: 0
Строк: 0

Выберите способ разворота

Что такое разворот строки?

String Reverse меняет порядок символов текста и выводит строку в обратном направлении. Идея простая, но реальный текст сложнее, чем ASCII-буквы: Unicode-символы, emoji, комбинируемые акценты, переносы строк, пробелы и письменности справа налево могут вести себя иначе в зависимости от подсчета символов. Инструмент полезен для текстовых экспериментов, проверки палиндромов, небольших головоломок, отладки строк, обучения и поиска скрытых пробелов или суффиксов. Это не криптографическое скрытие и не безопасная маскировка чувствительных данных. Если ввод содержит составные emoji или символы из нескольких code points, результат нужно проверить внимательно. Для опубликованного или многоязычного контента результат нужно проверить по языку, charset, контексту и edge cases.

Как использовать

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

  1. Введите или вставьте текст для переворачивания в левое поле
  2. Выберите режим (перевернуть всё, перевернуть слова и т. д.)
  3. Справа сразу отображается перевёрнутый результат
  4. Нажмите «Копировать» для копирования или «Поменять местами», чтобы использовать результат как входные данные

Обработка текста

  • Переворачивание обычного текста простое, но эмодзи, комбинирующие диакритические знаки и языки с письмом справа налево могут дать неожиданный визуальный эффект.
  • Для кода, URL или структурированных данных переворачивайте только нужный фрагмент, а не весь текст целиком.

Применение

Разворот текста на разных структурных уровняхВыберите полный разворот символов, разворот порядка слов, разворот каждого слова, разворот каждой строки, разворот порядка строк или разворот порядка предложений. Результат обновляется при изменении ввода и может быть возвращён в панель ввода. Правильный уровень сохраняет осмысленность: разворот слов перемешивает список, а разворот каждого слова сохраняет элементы целыми и переворачивает только буквы.
Тестирование текстовых преобразований и граничных случаевРежимы на уровне символов используют spread syntax, которая лучше обрабатывает многие Unicode-символы, чем простой побайтовый разворот. Режимы строк и слов сохраняют разные части пробелов в зависимости от выбранного преобразования — это удобно для быстрых экспериментов с данными. Вставка сложных входных данных — пустых строк, двойных пробелов или завершающих табуляций — показывает, как каждый режим обрабатывает невидимые разделители.
Подготовка игровых или диагностических текстовых вариантовРазворачивайте имена, списки, предложения или строки логов для головоломок, тестовых данных, проверки вёрстки и ручного сравнения. Счётчики строк и символов на обеих панелях помогают убедиться, что преобразование изменило порядок, а не структуру. Оба счётчика должны совпадать между вводом и выводом для чистого разворота — это быстрая числовая проверка как надёжный smoke-тест.
Проверка палиндромов с учётом emoji-последовательностейВставьте фразу и переключитесь на символьный разворот, чтобы проверить, читается ли она одинаково в обоих направлениях. Подход на основе spread сохраняет составные emoji и комбинирующие акценты как единые блоки, поэтому развёрнутая строка радужного флага по-прежнему группирует флаг корректно. Настоящий палиндром должен вернуться в исходную форму после одного полного разворота — это быстрая проверка для входных данных, которые выглядят симметричными, но не являются таковыми.
Разворот emoji с учётом графем и двунаправленного текстаДля входных данных вроде «👨‍👩‍👧» (семейный emoji, составленный из мужчины, ZWJ, женщины, ZWJ, девочки) наивный побайтовый разворот разбивает последовательность на сломанные глифы. Этот инструмент итерирует по графемным кластерам, поэтому развёрнутый семейный emoji остаётся целым вместо «👧‍👩‍👨». Для арабского или ивритского входа визуальный порядок справа налево сохраняется рендерером; символьный разворот в данных по-прежнему будет выглядеть развёрнутым на экране, поэтому тестируйте результат с учётом рендеринга языка, прежде чем считать это ошибкой.

Технический принцип

Разворот на уровне символов использует 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-алгоритм борется с разворотом. Разворот — это в основном задача для кода или головоломок, а не реальный приём преобразования текста.

Загружается ли мой текст?

Нет. Разворот выполняется в вашем браузере. Вставленный текст не передаётся.

Похожие инструменты

Конвертер регистра

Бесплатный онлайн-конвертер регистра: camelCase, snake_case, kebab-case, CONSTANT и другие форматы. Незаменим для разработчиков при переименовании переменных.

Инструмент подсчета слов

Бесплатный онлайн-счётчик символов, слов, абзацев и времени чтения в реальном времени. Незаменимый помощник при написании статей, эссе и постов для соцсетей.

Инструмент сравнения текста

Бесплатный онлайн-инструмент для сравнения текста с подсветкой различий. Построчное сравнение помогает быстро найти изменённые фрагменты.

Инструмент дедупликации текста

Бесплатный онлайн-инструмент для удаления дубликатов текста с режимами по строкам, словам, предложениям и абзацам. Удаляйте дубликаты с опциями регистра и порядка.

Инструмент тестирования регулярных выражений

Бесплатный онлайн-тестер регулярных выражений с мгновенным сопоставлением и подсветкой совпадений. Отлаживайте и проверяйте regex на ваших примерах.

Инструмент преобразования китайского

Бесплатный онлайн-конвертер китайского письма между упрощённым и традиционным. Учитывает различия в лексике материкового Китая, Тайваня и Гонконга при переводе.