空白处理

去首尾、合并空格、删全部空白、删 Tab、CRLF 与 LF 互转

空白处理:六种清理动作的适用场景

六个按钮各自做了什么

动作行为适合
去首尾逐行去掉行首和行尾的空白从网页、表格、PDF 复制来的文本,最常见的清理
合并空格把连续的空格与制表符压成单个空格修复排版错乱的对齐文本
删所有空白删掉全部空白字符,包括换行压缩成一整行、去掉标识符里的空格
删 Tab只删制表符,保留空格把 Tab 缩进改成空格缩进(但不会补上空格,见下)
CRLF→LF把 Windows 换行转成 Unix 换行提交到 Git、在 Linux 上运行、写 shell 脚本
LF→CRLF把 Unix 换行转成 Windows 换行给 Windows 记事本等老编辑器看

换行的坑: 会静默破坏数据

换行符不只有一种,这是跨平台故障的常见根源:

体系字节序列说明
Unix / Linux / macOS 现代\n(LF,0x0A)事实标准,Git 与大多数工具默认
Windows\r\n(CRLF,0x0D 0x0A)记事本等的历史习惯
老式 Mac(OS 9 之前)\r(CR,0x0D)几乎见不到了,但偶尔出现在老数据里

最典型的故障形态:整行内容看起来完全一样,但多了一个不可见的 \r。表现包括:

所以"CRLF→LF"不只是一个格式偏好选项,而是排查"看不出区别但就是不对"这类问题的第一步。

Tab 转空格不是简单删除

"删 Tab"只是把制表符移除,不会插入等宽空格。所以 \tif (x) 会变成 if (x)——缩进层级消失了,而不是变成 4 个空格。

这对代码类文本通常不是想要的结果。要真正"Tab 转 4 空格",需要的是替换动作:用批量查找替换工具,把 \t(正则模式)替换成四个空格。制表符还能作为正则的 \t 直接匹配,所以这个替换很直接。

反过来的需求也常见:把空格缩进改成 Tab(减小文件体积、统一团队规范)。那是查找 (四个空格)替换为 \t,注意要按缩进层级从深到浅处理,否则会出错。这类格式化工作交给编辑器或 Prettier 这类工具更可靠。

合并空格不会处理换行

"合并空格"只处理空格和制表符,不动换行。所以段落结构会被保留。如果把换行也压掉,整段文本会变成一行——那是"删所有空白"的效果。

需要"把一段多行文本压成一行,但保留词间一个空格"时,正确做法是两步:先把换行替换成空格(用查找替换工具,正则 \s*\n\s* 替换为一个空格),再合并连续空格。

实践里的处理顺序

清理从外部复制来的文本,推荐这个顺序:

  1. CRLF→LF。先把换行统一,后面的处理才有一致的假设。
  2. 去首尾。逐行去掉首尾空白,消掉大部分格式噪声。
  3. 删 Tab 或替换成空格。按目标格式决定。
  4. 合并空格。需要保留对齐时跳过这一步。
  5. 去空行 / 去重。用按行去重排序工具收尾。

这个顺序会让每一步的输入都是干净的,避免"上一层的空白导致这一层的匹配失效"的连锁问题。全部处理在浏览器本地完成。

常见问题

"去首尾"是按整段还是按行?

按行处理:每行的前后空白都会被去掉,行内中间的空格保留。

CRLF 和 LF 是什么?

Windows 用回车+换行(CRLF,\r\n)作换行,Unix / macOS 与多数代码文件用换行(LF,\n)。互转用于跨平台对齐。