如何使用JavaScript从字符串中删除空格?


552

如何删除字符串中的空格?例如:

输入:

'/var/www/site/Brand new document.docx'

输出:

'/var/www/site/Brandnewdocument.docx'

我的解决方案" ahm ed ".split('').filter(e => e.trim().length).join('')
UA_

Answers:


1223

这个?

str = str.replace(/\s/g, '');

var str = '/var/www/site/Brand new document.docx';

document.write( str.replace(/\s/g, '') );


更新:基于此问题,此:

str = str.replace(/\s+/g, '');

是更好的解决方案。它产生相同的结果,但是速度更快。

正则表达式

\s是“空白”的正则表达式,并且g是“全局”标志,表示匹配ALL\s(空白)。

+这里可以找到一个很好的解释。

附带说明,您可以将单引号之间的内容替换为所需的任何内容,因此可以将空白替换为任何其他字符串。


@Gaurav我在SO上查找了类似的答案,而且我看到的.replace(/\s+/g, '')频率更高。那和我的回答有区别吗?
西米·维达斯

在这种情况下没有区别。但是+至少用于查找一次。
加拉夫

1
愚蠢的我,我觉得那.replace(' ','')行得通。非常感激!
安迪·默瑟

3
涉及到原始答案(Sime在他的编辑中链接到该答案)的+人只有60票,如果有人想也将其归功于stackoverflow.com/a/5964427/4258817
Mousey 2015年

2
注意不要意外引用您的正则表达式,例如,.replace('/\s+/g', '')因为它会尝试找到该文字字符串。这让我绊倒了……
RTF

75

var a = b = " /var/www/site/Brand new   document.docx ";

console.log( a.split(' ').join('') );
console.log( b.replace( /\s/g, '') ); 

有两种方法!


4
我喜欢split()和join()。
Eric Milliot-Martinez

2
split('')和join不会删除\ n,\ t空白字符,另一个解决方法是a.split('')。map(c => c.trim())。join('')
拉伯

36

最短和最快str.replace(/ /g, '');


基准测试:

这是我的结果-(2018.07.13)Chrome 67.0.3396(64位),Safari 11.0.3(13604.5.6),Firefox 59.0.2(64位)上的MacOs High Sierra 10.13.3):

短字符串

短字符串类似于OP问题中的示例

在此处输入图片说明

所有浏览器上最快的解决方案是/ /g(regexp1a)-Chrome 17.7M(操作/秒),Safari 10.1M,Firefox 8.8M。所有浏览器中最慢的是split-join解决方案。更改\s或添加+i向正则表达式减慢处理速度。

长弦

对于大约300万个字符的字符串,结果为:

  • regexp1a:Safari 50.14 ops / sec,Firefox 18.57,Chrome 8.95
  • regexp2b:Safari 38.39,Firefox 19.45,Chrome 9.26
  • split-join:Firefox 26.41,Safari 23.10,Chrome 7.98,

您可以在计算机上运行它:https : //jsperf.com/remove-string-spaces/1


1
有趣的是,在Firefox 73上,split-join方法现在对我来说是最快的,其次是regexp1a,速度降低了53%。
hackel

25

@rsplak回答如下:实际上,使用拆分/联接方式比使用regexp更快。看表演测试案例

所以

var result = text.split(' ').join('')

运行速度比

var result = text.replace(/\s+/g, '')

在小文本上这无关紧要,但是对于时间很重要的情况(例如在文本分析器中,尤其是在与用户交互时)而言,这很重要。


另一方面,\s+处理各种各样的空格字符。在\n和之间\t,还与\u00a0字符匹配,这是 在使用来获取文本时所输入的字符textDomNode.nodeValue

因此,我认为这里的结论可以如下:如果只需要替换空格 ' ',请使用split / join。如果符号类可以有不同的符号 -使用replace(/\s+/g, '')


1
不是 way faster。运行了测试,在我的Firefox 61上仅提高了 2.19%
。– vsync


2
  var output = '/var/www/site/Brand new document.docx'.replace(/ /g, ""); 
    or
  var output = '/var/www/site/Brand new document.docx'.replace(/ /gi,"");

注意:尽管您使用'g'或'gi'删除空格,但两者的行为相同。

如果在替换函数中使用“ g”,它将检查是否完全匹配。但是如果我们使用'gi',它会忽略大小写。

供参考单击这里


0

正则表达式+ Replace()

尽管regex的速度可能较慢,但在许多用例中,开发人员仅一次处理了几个字符串,因此考虑速度无关紧要。尽管/ /比/ \ s /快,但使用'\ s'可能更清楚地说明了另一个开发人员正在发生的情况。

let string = '/var/www/site/Brand new document.docx';
let path = string.replace(/\s/g, '');
// path => '/var/www/site/Brandnewdocument.docx'

Split()+ Join()

使用Split + Join允许对字符串进行进一步的链式操作。

let string = '/var/www/site/Brand new document.docx';
let path => string.split('').map(char => /(\s|\.)/.test(char) ? '/' : char).join('');
// "/var/www/site/Brand/new/document/docx";
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.