繁体   English   中英

JavaScript / jQuery:用文本中的第一个,第二个,第三个等代替空格

[英]JavaScript/jQuery: Replace 2nd, 3rd, etc space with   but not the first one in text

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

例如,此字符串:

var str = "hello     how are you    doing?  "

应该更改为

"hello     how are you    doing?  "

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

例如

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

会将所有' '替换为 

该功能可以做到

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)
}

但自从我写文档以来,您不会看到任何影响,但是如果您写到控制台,则肯定会看到影响

edit-1感谢mikej指出我的代码中的错误,我的小片段实际上和他的一样。 他的答案更加精确,并且比此处提供的信息更多,

答案由mikej

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

这使用replace的版本,该版本带有一个函数来生成替换作为第二个参数,并用单个空格替换2个或更多空格的每个出现位置,后跟适当数量的 

有一个String.prototype.repeat函数,但是IE中不支持该函数,因此您可能希望使用另一种方式来生成 的序列  目前。 Array(match.length).join(' ')是将从此答案中获取的字符串重复到另一个问题的简短方法。

作为替代方案,您可以使用此函数执行重复,再次从重复字符串问题中获取:

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。

如果您想入门,可以尝试以下类似的方法,受此答案的启发,并从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变量中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM