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

Posted

技术标签:

【中文标题】用 JavaScript 字符串中的单个空格替换多个空格【英文标题】:Replace multiple whitespaces with single whitespace in JavaScript string 【发布时间】:2011-09-04 00:36:10 【问题描述】:

我有带有额外空格的字符串,每次有不止一个空格时,我希望只有一个。

有人吗? 我尝试搜索谷歌,但没有任何对我有用。

谢谢

【问题讨论】:

从结尾/开头或文本中的任何位置删除重复的空格? Regex to replace multiple spaces with a single space的可能重复 【参考方案1】:

类似这样的:

var s = "  a  b     c  ";

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

【讨论】:

@Me 请仔细阅读问题:“每次有不止一个空格,我希望只有一个”。 这不是很明显吗?它用 1 个空格字符替换超过 1 个空格字符。 (想要的结果) @CiaranG 这是一个正则表达式 @Wardy,关闭 :-)。它将一个或多个替换为一个空格(但实际上是所需的结果)。 如果想用相同类型的空格替换 1+ 个空格怎么办? (例如 2+ 个空格和一个空格,3 个换行符和一个换行符等)如果同时存在换行符和空格,则必须用换行符替换,而如果同时存在空格和制表符,则必须替换为空间【参考方案2】:

您可以扩充 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();

【讨论】:

增加标准对象的原型是一个非常有争议的模式。对于这样一个基本的问题,我不会推荐它。【参考方案3】:

使用带有替换功能的正则表达式可以解决问题:

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

【讨论】:

根据问题,这个解决方案是错误的。我真的很想知道你为什么在发布更好的解决方案两天后发布它...... 我当时认为,只有这段代码对我有用。我无法回头确认。我显然会先尝试最好的解决方案。此外,在 chrome 控制台中检查后,这两种解决方案似乎都有效。然而有趣的是,当我将结果复制到此评论框中时,它表明我的解决方案不适用于多个空格。也许你可以帮助我理解为什么。我猜这是一个chrome错误?尝试在 chrome 控制台中运行我的代码并告诉我。【参考方案4】:

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

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(n => n) 替换为.filter(String)

它用 空格 分割字符串,从数组中删除它们所有的空数组项(那些超过一个空格的项),然后将所有单词再次连接成一个字符串,用它们之间有一个空格。

【讨论】:

这甚至结合了内置的 trim() 字符串,太棒了。【参考方案5】:

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

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

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

这将删除字符串开头或结尾的所有空格。如果您只想从末尾修剪空格,则正则表达式将如下所示:

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

希望对您有所帮助。

【讨论】:

我喜欢你的正则表达式@Spudley 的简单性,但你的代码不会用一个空格字符替换开头和结尾的空格吗?我认为目标是完全删除末尾的空格,在这种情况下,替换字符串应该是 '' 而不是 ' '【参考方案6】:

jQuery.trim() 效果很好。

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

【讨论】:

请记住,这不会删除所有空格。引用文档:“从字符串的开头和结尾删除空格。”【参考方案7】:

我知道我不应该对某个主题使用死灵法,但考虑到问题的细节,我通常将其扩展为:

我想用一个空格替换字符串中多次出现的空格 ...并且...我不想在字符串的开头或结尾出现空格(修剪)

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

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

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

【讨论】:

+1 表示“准备使用”示例.. 我打算自己发布它 正是我想要的,太棒了!【参考方案8】:

var x = " Test Test Test ".split(" ").join(""); 警报(x);

【讨论】:

它可以工作,但它不是智能编码。此代码比 RegEx 慢。我想知道 Split() 是否不使用 RegEx 来拆分字符串!【参考方案9】:

试试这个。

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

结果是

string 1

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

【讨论】:

【参考方案10】:

这个怎么样?

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

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

这个也去掉了所有标签

【讨论】:

标签已被\s 覆盖。不必要的复杂正则表达式,还不如写/\s+/g 有趣的是,这是唯一使用2, 的答案。 9999 是不必要的,甚至可能是错误的。我不确定仅匹配和替换 2 个或更多空格对性能有益还是有害。【参考方案11】:

如果您想限制用户在名称中给出空格,只需创建一个 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 函数。 这是按键事件。 初始化一个变量。 给出匹配字符的条件 显示符合条件的警报消息。

【讨论】:

以上是关于用 JavaScript 字符串中的单个空格替换多个空格的主要内容,如果未能解决你的问题,请参考以下文章

用单个空格替换字符串中的多间距 - Python [重复]

正则表达式或用单个空格替换多个空格的方法

正则表达式 Python - 用单个空格替换换行符、制表符、空格的任意组合[重复]

如何在 C# 中用单个空格替换多个空格?

如何从 char 数组中清除单个字符?

用单个空格替换任意数量的空格[重复]