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

IT技术 javascript text
2021-01-16 11:48:34

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

输入:

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

输出:

'/var/www/site/Brandnewdocument.docx'
6个回答

这?

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(空白)。

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

作为旁注,您可以将单引号之间的内容替换为您想要的任何内容,因此您可以将空格替换为任何其他字符串。

傻我,我的印象是.replace(' ','')会起作用。非常感激!
2021-03-24 11:48:34
@Gaurav 我在 SO 上查找过类似的答案,而且我.replace(/\s+/g, '')经常看到那和我的回答有区别吗?
2021-03-25 11:48:34
请记住,\s(空格)与普通空格不同。这还包括字符换行、回车、制表符、垂直制表符、换页符等。有关更多信息,请查看JavaScript RegExp 特殊字符
2021-04-01 11:48:34
+如果有人也想相信他/她的话,原始答案(Sime 在他的编辑中链接到)只有 60 票stackoverflow.com/a/5964427/4258817
2021-04-03 11:48:34
小心不要意外引用您的正则表达式,例如.replace('/\s+/g', '')因为它会尝试找到该文字字符串。这让我之前绊倒了...
2021-04-05 11:48:34

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

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

两种方法做到这一点!

split(' ') 和 join 不会删除 \n , \t 空白字符,另一种解决方法是 a.split('').map(c =>c.trim()).join('')
2021-03-21 11:48:34
我喜欢 split() 和 join()。
2021-03-27 11:48:34

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


基准:

这是我的结果 - Chrome 67.0.3396(64 位)、Safari 11.0.3(13604.5.6)、Firefox 59.0.2(64 位)上的(2018.07.13)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 操作/秒,Firefox 18.57,Chrome 8.95
  • regexp2b:Safari 38.39、Firefox 19.45、Chrome 9.26
  • 拆分连接:Firefox 26.41、Safari 23.10、Chrome 7.98、

你可以在你的机器上运行它:https : //jsperf.com/remove-string-spaces/1

有趣的是,我现在在 Firefox 73 上使用 split-join 方法是最快的,其次是 regexp1a,但要慢 53%。
2021-03-26 11:48:34

按照@rsplak 的回答:实际上,使用拆分/连接方式比使用正则表达式要快。查看性能测试用例

所以

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

运行速度比

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

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


另一方面,\s+处理更广泛的空格字符。\nand 中\t,它还匹配\u00a0字符,这就是 使用textDomNode.nodeValue.

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

@vsync 他没有说它“更快”,他说“拆分连接方式 更快”。换句话说,“拆分连接方法 更快”。他没有说有多快,只是说是。
2021-03-15 11:48:34
var input = '/var/www/site/Brand new document.docx';

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

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

alert(input);

单击此处查看工作示例