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

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

var str = ' ABCD EF '; 

我们想从string中删除空格(我们想要这个: 'ABCDEF' )。

这两个:

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

和这个:

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

将返回正确的结果。

这是否意味着+在这种情况下是多余的? 在这种情况下,这两个正则expression式是否有区别(如在,它们能以任何方式产生不同的结果)?


更新:性能比较 – /\s+/g更快。 看到这里: http : //jsperf.com/s-vs-s

在第一个正则expression式中, 每个空格字符都被逐字符replace为空string。

在第二个正则expression式中,由于+每个连续的空格string被replace为空string。

然而,就像0乘以其他任何东西是0一样,好像两个方法都以完全相同的方式去除空格。

如果将replacestring更改为'#' ,则差异会变得更加清晰:

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

意思是“一个空间”,意思是“一个或多个空间”。

但是,因为您使用/g标志(replace所有出现的)并replace为空string,所以您的两个expression式具有相同的效果。

在匹配的情况下,第一个将返回一个匹配每个空白,当第二个将返回匹配的每个组的空格。

结果是相同的,因为你用一个空stringreplace它。 例如,如果将其replace为“x”,结果将会不同。

str.replace(/\s/g, '')将返回'xxAxBxxCxxxDxEF'

str.replace(/\s+/g, '')将返回'xAxBxCxDxEF'

因为\s匹配每个空格,用'x'replace每个空格, \s+匹配空格组,用一个'x'replace多个连续的空格。

+表示“一个或多个字符”,没有加号表示“一个字符”。 在你的情况下,两个结果相同的输出。