[英]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指出我的代码中的错误,我的小片段实际上和他的一样。 他的答案更加精确,并且比此处提供的信息更多,
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(' ')
为" "
但是对于生成重复字符串的其他方法,您需要比匹配长度少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
} 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.