【问题标题】:How to remove spaces from a string using JavaScript?如何使用 JavaScript 从字符串中删除空格?
【发布时间】:2011-08-23 05:17:16
【问题描述】:

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

输入:

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

输出:

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

【问题讨论】:

  • 我的解决方案" ahm ed ".split('').filter(e => e.trim().length).join('')
  • @C.K 为什么比" ahm ed ".replace(/\s+/g, ''); 更好?对我来说,这似乎是最慢的(在当前的 Chrome 中)和最不可读的解决方案。 jsfiddle.net/n74qsh50

标签: javascript text


【解决方案1】:

这个?

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

例子

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

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

更新:基于this question,此:

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

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

正则表达式

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

+ 的一个很好的解释可以找到here

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

【讨论】:

  • @Gaurav 我在 SO 上查找了类似的答案,我更经常看到.replace(/\s+/g, '')。这和我的回答有区别吗?
  • 真傻,我以为.replace(' ','') 会起作用。非常感谢!
  • 原始答案涉及(Sime 在他的编辑中链接到)+ 如果有人也想归功于他/她stackoverflow.com/a/5964427/4258817,则只有 60 票。
  • 小心不要意外引用您的正则表达式,例如.replace('/\s+/g', '') 因为它会尝试查找该文字字符串。这让我之前绊倒了......
  • 请记住\s(空格)与普通空格不同。这还包括字符换行、回车、制表符、垂直制表符、换页等。欲了解更多信息,请查看JavaScript RegExp special characters
【解决方案2】:

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

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

两种方法!

【讨论】:

  • 我喜欢 split() 和 join()。
  • split(' ') 和 join 不会删除 \n , \t 空白字符,另一种解决方法是 a.split('').map(c =>c.trim()) .join('')
【解决方案3】:

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


基准测试:

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

短字符串

类似于 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
  • 拆分加入:Firefox 26.41、Safari 23.10、Chrome 7.98、

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

【讨论】:

  • 有趣的是,拆分连接方法现在是我在 Firefox 73 上最快的方法,其次是 regexp1a,速度慢了 53%。
【解决方案4】:

按照@rsplak 的回答:实际上,使用拆分/加入方式比使用正则表达式更快。看表演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 方法 更快”。他没有说有多快,只是说它快了。
【解决方案5】:
var input = '/var/www/site/Brand new document.docx';

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

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

alert(input);

Click here for working example

【讨论】:

    【解决方案6】:
      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',它会忽略大小写。

    供参考click here

    【讨论】:

      【解决方案7】:

      没有正则表达式,它工作正常。

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

      为什么不简单地使用这个!? 这更快更简单!

      【讨论】:

      • 因为它只删除了一个空格。 replaceAll 将删除所有内容,但浏览器支持更差。
      【解决方案8】:

      你还使用了JS最新的字符串方法之一:replaceAll

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

      【讨论】:

        【解决方案9】:

        简单的方法

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

        【讨论】:

        • 这只会替换一次。 OP 的示例中有两个空格。
        • 那么你可以试试这个`someString.replace(/\s/gm, '');`
        【解决方案10】:

        正则表达式 + 替换()

        虽然正则表达式可能会更慢,但在许多用例中,开发人员一次只操作几个字符串,因此考虑速度是无关紧要的。尽管 / / 比 /\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 允许对字符串进行进一步的链式操作。

        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";
        

        【讨论】:

        • 我认为解释正在发生的事情并不是很有用,因为您可以轻松地将其包装成一个名为 removeWhiteSpace(string) { return string.replace(//g, '') }跨度>
        【解决方案11】:

        使用replaceAll 似乎是最简单最干净的方法。 (我不能保证最快)

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

        docs

        replaceAll() 方法返回一个新字符串,其中模式的所有匹配项都被替换。模式可以是字符串或正则表达式,替换可以是字符串或每次匹配调用的函数。

        【讨论】:

          【解决方案12】:

          var str = '/var/www/site/Brand new document.docx';
          
          document.write( str.replace(/\s\/g, '') );
          
          
          ----------

          【讨论】:

          • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
          【解决方案13】:
          your_string = 'Hello world';
          words_array = your_tring.split(' ');
          
          string_without_space = '';
          
          for(i=0; i<words_array.length; i++){
              new_text += words_array[i]; 
          }
          
          console.log("The new word:" new_text);
          

          输出:

          你好世界

          【讨论】:

          • 但是看,我们还在使用 for 循环 (forEach)
          • 是的,你是对的:geeksforgeeks.org/…
          • 这太昂贵了,而且不干净,使用循环来删除字符串中的空格?为什么不去 replaceAll(' ', '');
          猜你喜欢
          • 1970-01-01
          • 2021-09-04
          • 1970-01-01
          • 2020-02-02
          • 2012-07-03
          • 2019-10-23
          • 2019-11-05
          • 1970-01-01
          相关资源
          最近更新 更多