文本逆序翻转
文本所有处理都在浏览器本地完成,数据不上传服务器
「把文本倒过来」这句话本身是有歧义的,而四种理解给出的结果完全不同:`abc` 变成 `cba`(行内翻转)、第一行变成最后一行(行序倒置)、整段连着换行一起翻(整段翻转)、`one two` 变成 `two one`(词序倒置)。所以这里给的是四个独立的选项,而不是一个「翻转」按钮 —— 猜错一次的代价是重新粘贴一遍。 按字形簇翻转,不是按码元。 `「👍🏽」.length` 是 4:一个带肤色修饰的 emoji 在 UTF-16 里占 4 个码元。按码元倒过来会把它拆成两个孤立的代理项,屏幕上直接是 `��`;按码点倒能修好代理对,但拆不掉 `👨👩👧` 这类 ZWJ 序列与带变音符号的拉丁字母。所以这里用浏览器原生的字形簇切分,取的是「你眼里的一个字」。 词序倒置不会动你的排版。 首尾空白与词之间的间隔都留在原位,只把词换位置 —— 否则 ` foo bar` 会变成 `bar foo `,缩进跑到行尾。
功能
- 四种翻转各自独立:每行内部、整段、行序、词序
- 按字形簇处理,emoji、肤色修饰、ZWJ 序列与组合变音符号都不会被拆成半个字符
- 行内与词序模式保留行结构,行数不变
- 词序倒置保留首尾空白与词间间隔,缩进不会跑到行尾
- 行序倒置是纯行序操作,行内一个字都不动
- CRLF / CR / LF 三种换行都认,输出统一成 LF
- 空行照常参与(行序倒置会把它一起倒过来)
- 全程在浏览器本地计算,内容不上传
使用方法
- 把要翻转的文本粘贴进输入框
- 选一个翻转单位,结果实时更新
- 点「复制」取走结果
常见问题
- 「整段翻转」和「行序倒置」有什么区别?
- 行序倒置只换行的位置,行内一个字都不动:`abc / def` 变成 `def / abc`。整段翻转是把整段文字当作一个序列倒过来,换行也在被翻转的序列里:`abc\ndef` 变成 `fed\ncba` —— 行数不变,但每一行的内容来自原来的另一行,行尾那个换行的有无也会翻过来。它就是「把纸转 180°」的字面意思,也是最容易让人意外的一个,所以单独列成一项。
- 为什么词序倒置之后缩进还在行首?
- 因为翻转的是词、不是字符。做法是把一行切成「词 / 间隔」交替的序列,间隔留在自己的位置上,只把词反转后填回去。所以 ` foo bar ` 得到 ` bar foo `(前导两空格与行尾空白都在)。连间隔一起反转的话缩进会跑到行尾 —— 那属于「顺手把我的排版也改了」,而这个工具不该做那件事。
- emoji 会被拆坏吗?
- 不会。切分用的是浏览器的字形簇规则(`Intl.Segmenter` 的 grapheme 粒度),它按「用户眼里的一个字符」切,而不是按码元或码点。所以肤色修饰的 `👍🏽`、ZWJ 连接的家庭 emoji、以及 `é` 这种「基字母 + 组合符」的两码点写法都是一个整体,翻转后不会被拆成乱码。
相关工具
文本清洗
文本清洗从日志或表格里复制出来的一列内容:去重行、排序、去空行、去首尾空白、去行号、合并多空格,规则逐条开关。粘贴的内容只在本机处理。
文本随机打乱
文本把文本随机打乱:按行、按字或按词重排,词间间隔与首尾缩进留在原位。纯本地运算,点一次换一批。
命名风格转换
文本在十四种命名风格之间转换标识符,拆词时认得 fooBarBaz 与 FOO_BAR 这类混写,连续大写也会按词拆开。全部在浏览器本地完成,不上传。
文本对比
文本把两份文本逐行对比,高亮标出新增、删除与未改动的行,改动按最小差异对齐,而不是整段标成变了。全部在浏览器本地完成,内容不上传。
字数统计
文本中英混排的文本到底有多长?中文按字、英文按词分开统计,给出字符数、行数、字节数、阅读与朗读时长,以及会被切成几条短信。全部在本机完成。
简繁转换
文本在简体与繁体之间互转中文,常用词整词替换,其余字取最常见写法,因此个别字词仍需人工核对。全部在浏览器本地完成,不上传。