首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >/\s/g和/\s+/g之间有区别吗?

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

Stack Overflow用户
提问于 2011-05-11 20:39:28
回答 4查看 131.8K关注 0票数 99

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

代码语言:javascript
运行
复制
var str = '  A B  C   D EF ';

我们想要删除字符串中的空格(我们想要这样:'ABCDEF')。

这两种情况:

代码语言:javascript
运行
复制
str.replace(/\s/g, '')

还有这个:

代码语言:javascript
运行
复制
str.replace(/\s+/g, '')

将返回正确的结果。

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

更新:性能比较- /\s+/g更快。查看此处:http://jsperf.com/s-vs-s

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-11 20:42:17

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

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

然而,就像0乘以其他任何东西都是0一样,这两种方法似乎以完全相同的方式剥离了空格。

如果您将替换字符串更改为'#',则差异将变得更加明显:

代码语言:javascript
运行
复制
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#
票数 244
EN

Stack Overflow用户

发布于 2011-05-11 20:41:40

\s表示“一个空格”,\s+表示“一个或多个空格”。

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

票数 28
EN

Stack Overflow用户

发布于 2011-05-11 20:41:46

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

结果是相同的,因为您将其替换为一个空字符串。例如,如果您将其替换为'x‘,结果将有所不同。

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

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

因为\s匹配每个空格,用'x‘替换每个空格,而\s+匹配空格组,用一个'x’替换多个连续的空格。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5964373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档