/ \ 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多个连续的空格。
+
表示“一个或多个字符”,没有加号表示“一个字符”。 在你的情况下,两个结果相同的输出。