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

我有额外的空格字符字符串。每次有一个以上的空白,我希望它是只有一个。我如何使用JavaScript做到这一点?

199341 次浏览

就像这样:

var s = "  a  b     c  ";


console.log(
s.replace(/\s+/g, ' ')
)

我假定您正在寻找从字符串的开头和/或结尾剥离空格(而不是删除所有空格?

如果是这样的话,你需要一个像这样的正则表达式:

mystring = mystring.replace(/(^\s+|\s+$)/g,' ');

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

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

希望这能有所帮助。

使用带有replace函数的正则表达式可以做到这一点:

string.replace(/\s/g, "")

你可以扩充String以方法的形式实现这些行为,比如:

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


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

这现在允许你使用以下优雅的形式来生成你想要的字符串:

"Get rid of my whitespaces.".killWhiteSpace();
"Get rid of my extra        whitespaces".reduceWhiteSpace();

jQuery.trim()工作得很好。

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

var x = "测试测试测试"。分割(" "). join (" "); 警报(x); < / p >

我知道我不应该在一个问题上使用巫术,但考虑到问题的细节,我通常会将其扩展为:

  • 我想用一个空格替换字符串中多次出现的空白
  • …和…我不希望在字符串的开头或结尾出现空格(trim)

为此,我使用了如下代码(第一个regexp上的括号只是为了使代码更具可读性……除非你熟悉regexp,否则它会让你很痛苦):

s = s.replace(/^(\s*)|(\s*)$/g, '').replace(/\s+/g, ' ');

这样做的原因是string -object上的方法返回一个字符串对象,你可以在这个对象上调用另一个方法(就像jQuery &其他一些库)。如果你想在一个对象上连续执行多个方法,这是一种更紧凑的编码方式。

如果你想限制用户在名字中给空格,只需创建一个If语句并给出条件。就像我一样:

$j('#fragment_key').bind({
keypress: function(e){
var key = e.keyCode;
var character = String.fromCharCode(key);
if(character.match( /[' ']/)) {
alert("Blank space is not allowed in the Name");
return false;
}
}
});
  • 创建一个JQuery函数。
  • 这是一个按键事件。
  • 初始化一个变量。
  • 给出匹配字符的条件
  • 为匹配的条件显示警报消息。

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

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 ES2015:
s = s.split(' ').filter(n => n).join(' ');
console.log(s); // "a b word word. word, wordword word"

甚至可以用.filter(String)代替filter(n => n)

它通过空白分割字符串,从数组中删除所有空数组项(超过一个空格的数组项),并将所有单词再次连接到一个字符串中,在它们之间使用一个空格。

这个怎么样?

"my test string \t\t with crazy stuff is cool ".replace(/\s{2,9999}|\t/g, ' ')

输出"my test string with crazy stuff is cool "

这个也可以去掉任何标签

试试这个。

var string = "         string             1";
string = string.trim().replace(/\s+/g, ' ');

结果将是

string 1

这里发生的事情是,它将首先使用trim()修整外部空间,然后使用.replace(/\s+/g, ' ')修整内部空间。