在Javascript中删除所有多余的空格并替换为单个空格

117

如何在JavaScript中自动将多个空格实例全部替换为单个空格?

我尝试使用一些s.replace链接,但这似乎不是最佳选择。

如果有内置功能的话,我也在使用jQuery。

4个回答

249

53
这个也可以。 s = s.replace(/ +/g, " "); - InfinitiesLoop
1
str= ''+str.replace(/ +(?= )/g,'') 如果你的 strundefiniedNaN,这是一个更好的解决方案 :) - Val
2
我正在从txt文件中读取数据(通过AJAX),@InfinitiesLoop的正则表达式可以正常工作,但是Josiah的无法正常工作。 - Jeff
2
这对我没用。然而@redexp有效。 - Delicia Brummitt
这可能会很慢:https://jsperf.com/removing-multiple-spaces - Aalex Gabi
显示剩余4条评论

58

44

你也可以引用正则表达式网站来获取各种正则表达式的风格和完整参考。 - Nick.T
3
使用括号量词相对于简单的“+”有哪些改进? - some-non-descript-user
@Aalex Gabi:当然,你是对的,但是除了美学之外,我怀疑在绝大多数应用程序中这都不会被注意到。也许只有在非常大的文件中才会有轻微的性能提升?在所有其他情况下,加号比括号更方便,我想说。 - some-non-descript-user
@some-non-descript-user 我同意使用“+”比使用括号更方便。至于性能,单个空格比双空格慢三分之一:https://jsperf.com/removing-multiple-spaces - Aalex Gabi
@Aalex Gabi:感谢您将性能提升数字化。这对于更大的任务来说绝对是一个警示。但是,仍然请原谅我的固执,您在大多数应用程序中都不会注意到它。 ;) - some-non-descript-user
显示剩余2条评论

5

您也可以在不使用正则表达式的情况下进行替换。

while(str.indexOf('  ')!=-1)str.replace('  ',' ');

1
也可以运行...问题是:哪个更有效率?这个版本还是正则表达式版本?我更喜欢正则表达式,因为我们从来没有练习过。 - Nick.T
我不知道——如果没有匹配项,这种方法会更有效。如果有很多匹配项,那么某人做错了。 - kennebec
这里有一个fiddle,我希望它能强调差异。它清楚地表明正则表达式在所有情况下至少与循环版本一样快。并不是说循环版本不好,只是要指出必须始终考虑产品的可维护性和演进。 - Nick.T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接