/\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+
意思是"一个或多个空间".
- \s 搜索第一空间和移动后续字符离开。然后它检查下一个位置并找到一个新的空间并重复步骤1.
- \s+ 一次检查所有连续空格,并将所有字符n(连续空白的数量)一次性移动,从而减少复杂
因此,性能比较来看, /\s+/g 会
更快些
现在你已经基本知道上面问题的答案了