如何用
替换所有空格但不替换第一个空格(不是空格后的第一个空格)。
例如,这个字符串:
var str = "hello how are you doing? "
应改为
"hello how are you doing? "
如您所见,第一个空间被保留。
例如,
str.split(' ').join(' ')
会将所有' '
替换为
。
答案 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在我的代码中指出错误,我的小片段实际上与他的相同。他的答案更精确,信息比这里提供的更多,
答案 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(' ')
为" "
但是对于生成重复字符串的其他方法,您需要比匹配长度少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
} 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
变量中。