【问题标题】:Javascript - How to remove all extra spacing between wordsJavascript - 如何删除单词之间的所有额外间距
【发布时间】:2011-11-29 23:02:43
【问题描述】:

如何删除字符串文字中单词之间的所有多余空格?

"some    value"

应该变成

"some value"

还有,

"    This    should  become   something          else   too . "

变成

"This should become something else too ."

不用担心移动.。和上面一样就好。我知道我可以使用$.trim(str) 来实现尾随/结尾空格的删除。但是,我不确定如何在单词之间设置 1 个空格。

【问题讨论】:

  • 正则表达式来拯救......!
  • 你试过用谷歌搜索“删除javascript单词之间的所有多余空格”吗?第三个链接就是你要找的lawrence.ecorp.net/inet/samples/regexp-format.php
  • @Massimiliano Peluso - 是的,这就是我找到$.trim() 的方式。此外,我从 SO 中学到的东西比从搜索引擎中学到的多。
  • “智者不是获得知识的人,而是知道如何找到他正在寻找的东西的人”:-)

标签: javascript jquery


【解决方案1】:
var str = "    This    should  become   something          else   too . ";
str = str.replace(/ +(?= )/g,'');

这里是a working fiddle

【讨论】:

  • 对所使用的正则表达式进行一点解释会很好!
  • 当只需要\s+ 时,为什么还要这么复杂的reg exp?还有why lookaheads are not good
  • 这意味着您要替换一个或多个空格字符 / + - 在整个字符串 (?= ) 之前的空格字符 /g 没有任何内容 ,'' 。你可以阅读更多关于它here
  • 'Hello world'.replace(/\s+/g, " ").trim();
  • @Shiala,与编程中的所有事情一样,有多种方法可以实现目标(顺便说一句,这个问题在 2011 年得到了回答)。如果您想提供更好的答案,请在答案中进行,而不是在评论中。
【解决方案2】:

另一个(可能更容易理解)正则表达式替换可以解决问题:

var input = /* whatever */;
input = input.replace(/ +/g, ' ');

正则表达式匹配一个或多个空格,因此.replace() 调用将每个单个或重复的空格替换为单个空格。

【讨论】:

    【解决方案3】:
    var str = 'some    value';
    str.replace(/\s\s+/g, ' ');
    

    【讨论】:

    • 为什么要多出\s?没有必要这样做。
    【解决方案4】:

    jsFiddle Example

    "    This    should  become   something          else   too . ".replace(/[\s\t]+/g,' ');
    

    【讨论】:

      【解决方案5】:
      var string = "    This    should  become   something          else   too . ";
      string = string.replace(/\s+/g, " ");
      

      此代码将一组连续的空白字符 (\s+) 替换为一个空格。请注意,空白字符还包括制表符和换行符。如果您只想替换空格,请将 \s 替换为空格。

      如果你还想去掉开头和结尾的空格,包括:

      string = string.replace(/^\s+|\s+$/g, "");
      

      此行删除开头 (^) 和结尾 ($) 的所有空白字符。正则表达式末尾的g 表示:全局,即匹配并替换所有出现。

      【讨论】:

      • var newString = string.replace(/^\s+|\s+$/g, "").replace(/\s+/g, " ");
      【解决方案6】:
      var str = "    This    should  become   something          else   too . "
      $.trim(str).replace(/\s(?=\s)/g,'')
      

      这使用前瞻将多个空格替换为单个空格。

      【讨论】:

        【解决方案7】:

        如果我们想避免使用正则表达式的替换功能,

        我们可以通过

        达到同样的效果
        str.split(' ').filter(s => s).join(' ')
        // var str = "    This    should  become   something          else   too . ";
        // result is "This should become something else too ."
        

        首先,用空格分割原始字符串,然后我们将在一个数组中包含空字符串和单词。其次,过滤以仅保留单词,然后用空格连接所有单词。

        【讨论】:

        • 请描述更多
        • 为什么这个过滤器有效?
        • @hamidrezaghanbari 代码下面的段落是我对代码的描述,用空格分割后,你将只有空字符串和字符串,过滤空字符串然后留下单词,然后用单个空格然后变成正常句子