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

802

如何在字符串中去除空格?例如:

输入:

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

输出:

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

3
我的解决方案是将字符串 "ahmed" 拆分成字符数组,过滤掉空格,然后再将其组合成一个新的字符串。 - U.A
1
@C.K 为什么这比 " ahm ed ".replace(/\s+/g, ''); 更好?对我来说,它似乎是最慢(在当前的Chrome中)和最难读的解决方案。https://jsfiddle.net/n74qsh50/ - Mark Baijens
15个回答

1742

这个?

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 是"全局"标志,意味着匹配所有的 \s (空白字符)。

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

另外需要注意的是,你可以将单引号之间的内容替换为任何你想要的内容,因此可以用任何其他字符串替换空白字符。


@Gaurav 我在 Stack Overflow 上查找了类似的答案,发现更常用的是 .replace(/\s+/g, '')。这种方法和我的回答有什么区别吗? - Šime Vidas
在这种情况下,没有区别。但是+用于查找至少出现一次。 - Gaurav
3
我当时傻了,以为.replace(' ','')会起作用。非常感谢! - Kelderic
3
如果有人想要给他/她点赞,原始答案包含(Sime在编辑中链接到的)“+”,只有60个赞。 - Mousey
4
注意不要无意中引用你的正则表达式,例如 .replace('/\s+/g', '') ,因为它会尝试查找该字面字符串。这曾经让我困扰过... - RTF
1
请记住\s(空白字符)不同于普通的空格,这也包括换行符、回车符、制表符、垂直制表符、分页符等其他字符。更多信息请查看 JavaScript RegExp特殊字符 - 3limin4t0r

120

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


基准测试:

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

短字符串

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

输入图像描述

所有浏览器上最快的解决方案都是 / /g (regexp1a) - Chrome 17.7M (operation/sec), Safari 10.1M, Firefox 8.8M。所有浏览器中最慢的是 split-join 解决方案。将 更改为 \s 或在正则表达式中添加 +i 将会降低处理速度。

长字符串

对于大约 ~3 百万个字符的字符串,结果如下:

  • 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

114

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

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

有两种方法可以做到这一点!


7
我喜欢 split() 和 join()。 - Eric Milliot-Martinez
8
split(' ')和join方法不能去除\n、\t等空格字符,另一个可行的解决方案是将字符串转化为字符数组,使用map()方法遍历每个字符并使用trim()方法去除左右两侧空格,最后再使用join()方法连接字符数组得到处理后的字符串。具体代码如下:a.split('').map(c => c.trim()).join('') - rab

37

以下是@rsplak的回答:实际上,使用split/join方法比使用正则表达式更快。请参考性能测试test case

所以:

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

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

要快一些。这对于小文本来说不太相关,但对于时间重要的情况非常重要,例如在与用户交互的文本分析器中。


另一方面,\s+ 可以处理更广泛的空格字符。它不仅匹配 \n\t,还匹配 \u00a0 字符,而这就是使用 textDomNode.nodeValue 获取文本时会转换为的   字符。

所以我认为可以得出以下结论:如果您只需要替换 空格 ' ',请使用 split/join。如果可能出现不同的 符号类别 符号,请使用 replace(/\s+/g, '')


@vsync他并没有说这是“快得多”,他说“split join way 更快”。换句话说,“split join method 更快”。他没有说有多快,只是说它更快。 - Self Evident

21

你还可以使用JavaScript最新的字符串方法之一:replaceAll

'/var/www/site/Brand new document.docx'.replaceAll(' ', '');

这就是方法。 - Eliaz Bobadilla

18

简单的方法

someString.replace(/ /g, '');
// or
someString.replace(/\s/gm, '');

2
这只会替换一次出现的内容。OP的示例中有两个空格。 - shmuels
那么你可以尝试这个 someString.replace(/\s/gm, ''); - MD SHAYON

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

//remove space
input = input.replace(/\s/g, '');

//make string lower
input = input.toLowerCase();

alert(input);

点击此处查看示例


8

没有正则表达式,它仅适用于一个出现的情况。

input = input.replace(' ', '');

这更快,因为它更简单!在某些情况下可能对你有帮助。


7
因为它只会移除一个空格,使用 replaceAll 会移除所有空格,但是浏览器支持更差。 - Tukkan
replace takes a RegExp or a string as its first argument which is known as pattern. If pattern is a string, only the first occurrence will be replaced. I would either go for a RegExp or for replaceAll - BonisTech
感谢BonisTech和Tukkan,我刚刚编辑了我的回答以避免误解。 - Meloman

4
  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”,它会忽略大小写敏感性。
有关参考 点击这里

4
您可以使用正则表达式从字符串中删除空格。
let str = '/var/www/site/Brand new document.docx';
let result = str.replace(/\s/g, '');

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