用 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 字符串中的单个空格替换多个空格的主要内容,如果未能解决你的问题,请参考以下文章