/\s/g和/\s +/g之间有区别吗?

当我们有一个包含空格字符的字符串时:

var str = '  A B  C   D EF ';

我们想从字符串中删除空格(我们想要这个:) 'ABCDEF'.

这两个:

str.replace(/\s/g, '')

还有这个:

str.replace(/\s+/g, '')

将返回正确的结果.

这是否意味着+在这种情况下这是多余的?在这种情况下,这两个正则表达式之间是否存在差异(例如,它们是否会以任何方式产生不同的结果)?

我们先不回答这个问题,先反向操作一下

在第一个正则表达式中,每个空格字符都被逐字符替换,空字符串.

在第二个正则表达式中,每个连续的空格字符串都被替换为空字符串,因为+.

但是,就像0乘以其他任何东西是0一样,似乎两种方法都以完全相同的方式剥离空格.

如果将替换字符串更改为'#',则差异会变得更加清晰:

var str = '  A B  C   D EF ';
console.log(str.replace(/\s/g, '#'));  // ##A#B##C###D#EF#
console.log(str.replace(/\s+/g, '#')); // #A#B#C#D#EF#

我们发现:

\s意思是"一个空间",\s+意思是"一个或多个空间".

 
  1. \s 搜索第一空间和移动后续字符离开。然后它检查下一个位置并找到一个新的空间并重复步骤1.
  2. \s+ 一次检查所有连续空格,并将所有字符n(连续空白的数量)一次性移动,从而减少复杂

因此,性能比较来看,  /\s+/g 会更快些

现在你已经基本知道上面问题的答案了

 

posted @ 2022-07-19 22:32  我爱吃小丸子  阅读(1049)  评论(0编辑  收藏  举报