当我们有一个包含空格字符的字符串时:
var str = ' A B C D EF ';
我们想从字符串中删除空格(我们想要这个:'ABCDEF'
)。
这两个:
str.replace(/\s/g, '')
和此:
str.replace(/\s+/g, '')
将返回正确的结果。
这是否意味着+
在这种情况下是多余的?在这种情况下,这两个正则表达式之间是否存在差异(例如,它们是否会以任何方式产生不同的结果)?
更新:效果比较 - /\s+/g
更快。见这里:http://jsperf.com/s-vs-s
答案 0 :(得分:184)
在第一个正则表达式中,每个空格字符正逐字符替换,空字符串。
在第二个正则表达式中,空格字符的每个连续字符串由于+
而被替换为空字符串。
然而,就像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#
答案 1 :(得分:20)
\s
表示“一个空格”,\s+
表示“一个或多个空格”。
但是,因为你正在使用/g
标志(替换所有出现)并用空字符串替换,所以你的两个表达式具有相同的效果。
答案 2 :(得分:9)
在匹配情况下,第一个会在每个空格中返回一个匹配,而第二个会为每组空格返回一个匹配。
结果是一样的,因为你用空字符串替换它。例如,如果用'x'替换它,结果会有所不同。
str.replace(/\s/g, '')
将返回'xxAxBxxCxxxDxEF'
而str.replace(/\s+/g, '')
将返回'xAxBxCxDxEF'
因为\s
匹配每个空格,用'x'替换每个空格,\s+
匹配空格组,用单个'x'替换多个连续的空格。
答案 3 :(得分:2)
+
表示“一个或多个字符”,没有加号表示“一个字符”。在你的情况下,两者都会产生相同的输出。