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

Šim*_*das 73 javascript regex

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

var str = '  A B  C   D EF ';
Run Code Online (Sandbox Code Playgroud)

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

这两个:

str.replace(/\s/g, '')
Run Code Online (Sandbox Code Playgroud)

还有这个:

str.replace(/\s+/g, '')
Run Code Online (Sandbox Code Playgroud)

将返回正确的结果.

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


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

Bol*_*ock 195

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

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

但是,就像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#
Run Code Online (Sandbox Code Playgroud)


Lig*_*ica 21

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

但是,因为你正在使用/g标志(替换所有出现)并用空字符串替换,所以你的两个表达式具有相同的效果.


Dou*_*oug 9

在匹配情况下,第一个将返回每个空格一个匹配,而第二个将返回每组空格的匹配.

结果是相同的,因为您要用空字符串替换它.例如,如果用'x'替换它,结果会有所不同.

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

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

因为\s匹配每个空格,用'x'替换每个空格,并\s+匹配空白组,用单个'x'替换多个连续的空格.


Jos*_* M. 5

+表示“一个或多个字符”,没有加号则表示“一个字符”。在你的情况下,两者都会产生相同的输出。