用JavaScript字符串中的单个空格替换多个空格

eve*_*ve 187 javascript string trim

我有额外的空格字符串,每次只有一个空格我想它只有一个.

任何人?我试着搜索谷歌,但没有任何对我有用.

谢谢

bjo*_*rnd 360

像这样的东西:

var s = "  a  b     c  ";

console.log(
  s.replace(/\s+/g, ' ')
)
Run Code Online (Sandbox Code Playgroud)

  • @Me请仔细阅读这个问题:"每次只有一个空格,我希望它只有一个". (31认同)
  • 不是很明显吗?它用1个空白字符替换超过1个空白字符.(期望的结果) (5认同)
  • @CiaranG这是一个正常的表达 (4认同)

小智 61

您可以扩充String以将这些行为实现为方法,如:

String.prototype.killWhiteSpace = function() {
    return this.replace(/\s/g, '');
};

String.prototype.reduceWhiteSpace = function() {
    return this.replace(/\s+/g, ' ');
};
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用以下优雅表单生成所需的字符串:

"Get rid of my whitespaces.".killWhiteSpace();
"Get rid of my extra        whitespaces".reduceWhiteSpace();
Run Code Online (Sandbox Code Playgroud)

  • 增加标准对象的原型是一个非常有争议的模式.我不会推荐这个基本问题. (14认同)

Rog*_*raj 20

使用带有replace函数的正则表达式可以解决问题:

string.replace(/\s/g, "")
Run Code Online (Sandbox Code Playgroud)

  • 根据问题,这个解决方案是错误的。我真的很想知道为什么你在发布更好的解决方案两天后才发布它...... (2认同)

vsy*_*ync 13

这是一个非正则表达式解决方案(只是为了好玩):

var s = ' a   b   word word. word, wordword word   ';

// with ES5:
s = s.split(' ').filter(function(n){ return n != '' }).join(' ');
console.log(s); // "a b word word. word, wordword word"

// or ES6:
s = s.split(' ').filter(n => n).join(' '); 
console.log(s); // "a b word word. word, wordword word"
Run Code Online (Sandbox Code Playgroud)

它通过它的空格分割字符串,将它们全部从数组中删除,然后再次连接所有单词,它们之间只有一个空格.


Spu*_*ley 12

我认为你想要从字符串的开头和/或结尾去除空格(而不是删除所有空格?

如果是这种情况,你需要这样的正则表达式:

mystring = mystring.replace(/(^\s+|\s+$)/g,' ');
Run Code Online (Sandbox Code Playgroud)

这将从字符串的开头或结尾删除所有空格.如果你只想从末尾修剪空格,那么正则表达式将是这样的:

mystring = mystring.replace(/\s+$/g,' ');
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

  • 我喜欢你的正则表达式的简单性,@ Spudley,但是你的代码不会在开头和结尾用一个空格字符替换空格的运行吗?我认为目标是完全从末端删除空格,在这种情况下,替换字符串应该是'''`而不是'''`. (4认同)

chu*_*g2k 8

jQuery.trim()效果很好.

http://api.jquery.com/jQuery.trim/

  • 请记住,这并不会删除所有空格.引用文档:"从字符串*的开头和结尾删除空格*." (14认同)

小智 6

我知道我不应该对某个主题进行暗示,但考虑到问题的细节,我通常将其扩展为:

  • 我想用一个空格替换字符串中的多个空格
  • ... ... ...我不希望在字符串的开头或结尾有空格(修剪)

为此,我使用这样的代码(第一个正则表达式中的括号只是为了使代码更具可读性...除非你熟悉它们,否则正则表达式会很痛苦):

s = s.replace(/^(\s*)|(\s*)$/g, '').replace(/\s+/g, ' ');
Run Code Online (Sandbox Code Playgroud)

这样做的原因是String-object上的方法返回一个字符串对象,您可以在其上调用另一个方法(就像jQuery和其他一些库一样).如果要连续在单个对象上执行多个方法,则需要更加紧凑的代码方式.