当我们有一个包含空格字符的字符串时:
var str = ' A B C D EF ';
我们想要删除字符串中的空格(我们想要这样:'ABCDEF'
)。
这两种情况:
str.replace(/\s/g, '')
还有这个:
str.replace(/\s+/g, '')
将返回正确的结果。
这是否意味着+
在这种情况下是多余的?在这种情况下,这两个正则表达式之间是否存在差异(例如,它们是否会以任何方式产生不同的结果)?
更新:性能比较- /\s+/g
更快。查看此处:http://jsperf.com/s-vs-s
发布于 2011-05-11 20:42:17
在第一个正则表达式中,每个空格字符都被替换为空字符串。
在第二个正则表达式中,由于+
的原因,每个连续的空格字符串都被替换为空字符串。
然而,就像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#
发布于 2011-05-11 20:41:40
\s
表示“一个空格”,\s+
表示“一个或多个空格”。
但是,因为您使用了/g
标志(替换所有出现的内容)并替换为空字符串,所以您的两个表达式具有相同的效果。
发布于 2011-05-11 20:41:46
在匹配情况下,第一个将为每个空格返回一个匹配,而第二个将为每组空格返回一个匹配。
结果是相同的,因为您将其替换为一个空字符串。例如,如果您将其替换为'x‘,结果将有所不同。
str.replace(/\s/g, 'x')
将返回“xxAxBxxCxxxDxEF”
而str.replace(/\s+/g, 'x')
将返回“xAxBxCxDxEF”
因为\s
匹配每个空格,用'x‘替换每个空格,而\s+
匹配空格组,用一个'x’替换多个连续的空格。
https://stackoverflow.com/questions/5964373
复制相似问题