给定一个这样的字符串:

"The dog      has a long   tail, and it     is RED!"

什么样的jQuery或JavaScript魔法可以用来保持空间只有一个最大空间?

目标:

"The dog has a long tail, and it is RED!"

当前回答

既然你似乎对性能很感兴趣,我用firebug分析了一下。以下是我得到的结果:

str.replace( /  +/g, ' ' )       ->  380ms
str.replace( /\s\s+/g, ' ' )     ->  390ms
str.replace( / {2,}/g, ' ' )     ->  470ms
str.replace( / +/g, ' ' )        ->  790ms
str.replace( / +(?= )/g, ' ')    -> 3250ms

这是在Firefox上,运行100k字符串替换。

如果您认为性能是个问题,我鼓励您使用firebug进行自己的分析测试。众所周知,人类不善于预测程序的瓶颈所在。

(另外,请注意,IE 8的开发者工具栏也有内置的分析器——它可能值得检查在IE中的性能是什么样的。)

其他回答

我知道我们必须使用正则表达式,但在一次采访中,我被要求不要使用正则表达式。

@slightlytyler帮助我提出了下面的方法。

const testStr = "I LOVE STACKOVERFLOW LOL"; const removeSpaces = str => { Const chars = str.split("); const nextChars = char .reduce( (acc, c) => { If (c === ' ') { const lastChar = acc[acc.]长度- 1]; if (lastChar === ' ') { 返回acc; } } 返回[…acc, c]; }, [], ); const nextStr = nextchar .join("); 返回nextStr }; console.log (removeSpaces (testStr));

尝试用一个空格替换多个空格。

<script type="text/javascript">
    var myStr = "The dog      has a long   tail, and it     is RED!";
    alert(myStr);  // Output 'The dog      has a long   tail, and it     is RED!'

    var newStr = myStr.replace(/  +/g, ' ');
    alert(newStr);  // Output 'The dog has a long tail, and it is RED!'
</script>

阅读更多@用单个空格替换多个空格

这是一种解决方案,尽管它将针对所有空格字符:

"The      dog        has a long tail,      and it is RED!".replace(/\s\s+/g, ' ')

"The dog has a long tail, and it is RED!"

编辑:这可能更好,因为它的目标是一个空格后面跟着一个或多个空格:

"The      dog        has a long tail,      and it is RED!".replace(/  +/g, ' ')

"The dog has a long tail, and it is RED!"

替代方法:

"The      dog        has a long tail,      and it is RED!".replace(/ {2,}/g, ' ')
"The dog has a long tail, and it is RED!"

我没有单独使用/\s+/,因为它可以多次替换跨越1个字符的空格,而且可能效率较低,因为它的目标超过了必要的范围。

我没有深入测试任何这些,所以如果有bug,我就不知道了。

另外,如果你要做字符串替换,记得重新分配变量/属性到它自己的替换,例如:

var string = 'foo'
string = string.replace('foo', '')

使用jQuery.prototype.text:

var el = $('span:eq(0)');
el.text( el.text().replace(/\d+/, '') )

如果你不想使用replace(替换字符串中的空格而不使用replace javascript),这里有一个替代解决方案。

var str=“狗有一条长尾巴,而且是红色的!”; var = / \ s规则{1,}/ g; STR = STR .split(规则)。加入(" "); document . write (str);

这个脚本删除了单词和修饰之间的任何空白(多个空格,制表符,返回值等):

// Trims & replaces any wihtespacing to single space between words
String.prototype.clearExtraSpace = function(){
  var _trimLeft  = /^\s+/,
      _trimRight = /\s+$/,
      _multiple  = /\s+/g;

  return this.replace(_trimLeft, '').replace(_trimRight, '').replace(_multiple, ' ');
};