正则表达式中的空白符详细解释

why- 为什么要专门写一篇空白符

空白符代表的是编程中常见的一些可以显示为空白的符号,最常见于正则表达式,比如:

var reg = /[\n\t\r\f\b\v\s]/;

这些字符其实是很常见的,但有时候又像是“最熟悉的陌生人”,有时甚至会混淆他们所代表的含义。

本文就彻底全面地对这些字符进行梳理解释,等我们明白了它们具体的含义和渊源后,就再也不会弄混它们了。

what- 它们分别代表什么意思:

符号含义
\n换行符
\r回车符
\t制表符
\f换页符
\v垂直制表符
\s空白字符

how- 怎么记忆

符号英文意义
\nnew line
\rreturn
\tTab
\fform feed
\vvertical
\sspace

when - 何时使用

符号用在哪里
\n当需要在当前行之下创建一个新行时使用
\r当需要将光标移动到当前行行首时使用
\t当需要使用制表缩进时使用,一个制表符并不等于四个或两个空格
\f当需要换页时使用
\v当需要在垂直方向制表缩进时使用
\s正则中使用,代表空白字符(\t\r\n\f\v<空格>

where - 来自哪里【渊源】

打字机

在现代计算机诞生很久前,键盘就已经诞生很多年了,它们被应用在电传打字机上面。

如下图所示,所有按键都链接再一个扇形的构件上面,每个按键对应着这个扇形构件的其中一个辐条,在扇形的圆心出,是一个缺口。

在使用打字机打字时,人们按下某个按键,打字机就将这个按键连接的辐条弹起,雕刻在这个辐条顶端的字母就穿过缺口打印到纸张上,然后另一个构件就会将纸张向左移动一个字母的位置,等待下一个按键按下。

image-20210926144352094

这就带来一个问题:

打字机每秒可以打印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当做一个不可打印字符显示,就会显示为一个黑色方框。

为了解决这个问题,windowsgit就会自动将LF替换为CRLF.

Tab键,则是源于tablate这个词。它的意思是“以表格或表格的形式组织数据”。当一个人想在打字机上键入一张表格(数字或文本),他必须经常使用空格键和退格键。这花费了太多的时间,而且相当烦人。为了简化操作,在机构中放置了一个称为制表机机架的水平杆。按下tab键将使机架向前移动到下一个制表器挡块。第一个制表机挡块是夹子,可以在制表机机架上进行调整和移动。

打印机

在早期打印机上,当人们要打印的内容明显在一页纸上打不下,怎么办呢? 当然是新进一张纸,继续打印剩余的内容

可问题是,打印机如何知道,该从哪一行开始进新纸张打印呢?

另外,有些时候,出于内容编排的需要,人们并不需要等到一张纸打不下的时候才新进纸张打印,而是将一些人们认为需要打印在一张纸上的内容打印完就立即新进一张纸来打印其它内容。

这个时候又该怎么办呢?

于是人们利用一个隐藏的字符\f来告诉打印机,该是时候新进纸张了。

后来,当人们需要在显示器上输出内容时,也会遇到文本内容在一屏内容显示不下或想要将特定内容放置到下一屏显示的需求,就借用了打印机的做法,使用了\f来作为换页分隔符,来告诉计算机显示器该在何时换页。

总结

符号含义英文缩写ASCII渊源
\n换行符new lineLF0x0A来自于电传打字机
\r回车符returnCR0x0D来自于电传打字机
\t制表符tab\tablateHT0x09来自于打字机
\f换页符form feedFF0x0C来自于打印机
\v垂直制表符vertical tabVT0x0B来自于打字机
\s空白字符space正则中代表以上所有字符+空格
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值