why- 为什么要专门写一篇空白符
空白符代表的是编程中常见的一些可以显示为空白的符号,最常见于正则表达式,比如:
var reg = /[\n\t\r\f\b\v\s]/;
这些字符其实是很常见的,但有时候又像是“最熟悉的陌生人”,有时甚至会混淆他们所代表的含义。
本文就彻底全面地对这些字符进行梳理解释,等我们明白了它们具体的含义和渊源后,就再也不会弄混它们了。
what- 它们分别代表什么意思:
符号 | 含义 |
---|---|
\n | 换行符 |
\r | 回车符 |
\t | 制表符 |
\f | 换页符 |
\v | 垂直制表符 |
\s | 空白字符 |
how- 怎么记忆
符号 | 英文意义 |
---|---|
\n | new line |
\r | return |
\t | Tab |
\f | form feed |
\v | vertical |
\s | space |
when - 何时使用
符号 | 用在哪里 |
---|---|
\n | 当需要在当前行之下创建一个新行时使用 |
\r | 当需要将光标移动到当前行行首时使用 |
\t | 当需要使用制表缩进时使用,一个制表符并不等于四个或两个空格 |
\f | 当需要换页时使用 |
\v | 当需要在垂直方向制表缩进时使用 |
\s | 正则中使用,代表空白字符(\t\r\n\f\v<空格> ) |
where - 来自哪里【渊源】
打字机
在现代计算机诞生很久前,键盘就已经诞生很多年了,它们被应用在电传打字机上面。
如下图所示,所有按键都链接再一个扇形的构件上面,每个按键对应着这个扇形构件的其中一个辐条,在扇形的圆心出,是一个缺口。
在使用打字机打字时,人们按下某个按键,打字机就将这个按键连接的辐条弹起,雕刻在这个辐条顶端的字母就穿过缺口打印到纸张上,然后另一个构件就会将纸张向左移动一个字母的位置,等待下一个按键按下。
这就带来一个问题:
打字机每秒可以打印10个字符,而换行到下一行行首需要0.2秒,正好是打印两个字符的时间,在换行时如果有其它字符传入,那这0.2秒内的字符将丢失。
为了解决这个问题,研究人员想了一个办法,就是在每行后面自动打印两个表示结束的字符来占用这0.2秒时间,避免其它字符在这0.2秒时间内传入。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。
这就是回车和换行的来历:
- 回车【Carriage Return】,根据其英文
return
, 使用\r
表示,通常我们会看到它被缩写为【CR】,ASCII码为0X0d
. - 换行【Line Feed】, 根据其英文
new line
,使用\n
表示,通常我们会看到它被缩写为【LF】,ASCII码为0x0a
.
我们在使用git add
命令时,有时会在命令终端看到这样的输出:
$ git add .
warning: LF will be replaced by CRLF in test1.txt.
意思是文件中的LF
将被CRLF
所替换,这是为什么呢?
其实这种信息只有在window
下才有机会看到,原因是,我们在各个不同系统按下回车键时,它们的处理是不一样的:
linux\unix
会在当前行的末尾加一个隐藏的\n
,即LF
符号Mac
系统下则会在当前行的末尾加一个隐藏的\r
,即CR
符号windows
则继承了打字机的技术,在当前行末尾加两个隐藏的字符\r\n
,即CRLF
.
之所以出现这种分歧,是因为一个开始计算机存储器很贵,有些计算机科学认为每行结尾加两个字符太浪费了,加一个就行。
那么,当我们在windows
系统下试图打开一个来自linux
系统是文件时,由于windows
会识别\r\n
而不会是识别单独的\n
,于是就会将\n
当做一个不可打印字符显示,就会显示为一个黑色方框。
为了解决这个问题,windows
下git
就会自动将LF
替换为CRLF
.
Tab键,则是源于tablate这个词。它的意思是“以表格或表格的形式组织数据”。当一个人想在打字机上键入一张表格(数字或文本),他必须经常使用空格键和退格键。这花费了太多的时间,而且相当烦人。为了简化操作,在机构中放置了一个称为制表机机架的水平杆。按下tab键将使机架向前移动到下一个制表器挡块。第一个制表机挡块是夹子,可以在制表机机架上进行调整和移动。
打印机
在早期打印机上,当人们要打印的内容明显在一页纸上打不下,怎么办呢? 当然是新进一张纸,继续打印剩余的内容
可问题是,打印机如何知道,该从哪一行开始进新纸张打印呢?
另外,有些时候,出于内容编排的需要,人们并不需要等到一张纸打不下的时候才新进纸张打印,而是将一些人们认为需要打印在一张纸上的内容打印完就立即新进一张纸来打印其它内容。
这个时候又该怎么办呢?
于是人们利用一个隐藏的字符\f
来告诉打印机,该是时候新进纸张了。
后来,当人们需要在显示器上输出内容时,也会遇到文本内容在一屏内容显示不下或想要将特定内容放置到下一屏显示的需求,就借用了打印机的做法,使用了\f
来作为换页分隔符,来告诉计算机显示器该在何时换页。
总结
符号 | 含义 | 英文 | 缩写 | ASCII | 渊源 |
---|---|---|---|---|---|
\n | 换行符 | new line | LF | 0x0A | 来自于电传打字机 |
\r | 回车符 | return | CR | 0x0D | 来自于电传打字机 |
\t | 制表符 | tab\tablate | HT | 0x09 | 来自于打字机 |
\f | 换页符 | form feed | FF | 0x0C | 来自于打印机 |
\v | 垂直制表符 | vertical tab | VT | 0x0B | 来自于打字机 |
\s | 空白字符 | space | – | – | 正则中代表以上所有字符+空格 |