JavaScript / jQuery:替换第二个,第三个等空格,但不替换文本中的第一个空格

时间:2017-01-26 22:07:44

标签: javascript jquery string replace preg-match

如何用 替换所有空格但不替换第一个空格(不是空格后的第一个空格)。

例如,这个字符串:

var str = "hello     how are you    doing?  "

应改为

"hello     how are you    doing?  "

如您所见,第一个空间被保留。

例如,

str.split(' ').join(' ')

会将所有' '替换为 

3 个答案:

答案 0 :(得分:2)

此功能将执行此操作

function myFunction() {
            var str = "hello     how are you    doing?  ";
            var patt1 = /\s{2,}/g; 
            var result = str.replace(patt1,function(filtered){
                return " " + Array(filtered.length).join(' ')
            }));
            document.getElementById("demo").innerHTML = result;
            console.log(result)
}

但是因为我正在写文件,你不会看到任何影响 但如果你写到控制台你肯定会看到影响

编辑-1 感谢mikej在我的代码中指出错误,我的小片段实际上与他的相同。他的答案更精确,信息比这里提供的更多,

answer By mikej

答案 1 :(得分:1)

str.replace(/  +/g, function(match) {
   return " " + Array(match.length).join(' ');
});

这使用replace的版本,它使用函数生成替换作为第二个参数,并用一个空格替换每个出现的2个或更多空格,后跟相应的 个数。

有一个String.prototype.repeat函数,但在IE中不支持它,因此您可能想要使用另一种方法来生成 的序列。 Array(match.length).join(' ')是重复从this answer转到另一个问题的字符串的简短方法。

作为替代方案,您可以使用此功能执行重复,再次从Repeat String问题中获取:

function repeat(pattern, count) {
    if (count < 1) return '';
    var result = '';
    while (count > 1) {
        if (count & 1) result += pattern;
        count >>= 1, pattern += pattern;
    }
    return result + pattern;
}

注意Array(n).join您不需要从匹配长度中减去1以获得正确数量的非中断空格。例如Array(3).join('&nbsp;')"&nbsp;&nbsp;"但是对于生成重复字符串的其他方法,您需要比匹配长度少1个。

答案 2 :(得分:1)

如果你想获得基础知识,你可以尝试下面的内容,受this answer的启发,以及Ates Goral的评论(单独的效用函数,而不是扩展基本字符串类)。应该适用于所有浏览器:

var str = "some    words    here";
var first = true;
for (var i=0; i<str.length; i++) {
  if (str[i] == " " && !first) {
    str = fix(str, i, '\u00A0'); //insert unicode for &nbsp;
  } else if (str[i] == " " && first) {
    first = false;
  } else if (str[i] != " ") {
    first = true;
  }
}

function fix(s, index, character) {
  return s.substr(0, index) + character + s.substr(index+character.length);
}

由于字符串是不可变的,因此每次进行更改时都必须返回整个(修改过的)字符串,并将其放在str变量中。