Javascript 无法替换for循环内字符串的字符
我的代码是这样的Javascript 无法替换for循环内字符串的字符,javascript,replace,Javascript,Replace,我的代码是这样的 function replaceAll(str, from, to) { let result = '' for(let i = 0 ; i < str.length ; i++) if(str[i]===from) { result = str.replace(from,to) } } return result; } 但是它只改变了“leop”您可以在JavaScript中使用replaceAll()函数 c
function replaceAll(str, from, to) {
let result = ''
for(let i = 0 ; i < str.length ; i++)
if(str[i]===from) {
result = str.replace(from,to)
}
}
return result;
}
但是它只改变了“leop”您可以在JavaScript中使用
replaceAll()
函数
conststr='loop';
log(str.replaceAll('o','e')代码>为什么?
对于简单替换,仅替换第一个匹配的文本。因此,您需要使用g
-全局文本匹配模式。但您将文本作为变量传递。因此,使用RegExp
创建正则表达式,如
函数replaceAll(str、from、to){
return str.replace(RegExp(from,'g'),to)
}
让输出=replaceAll('loop','o','e');
console.log(输出);//-->leep'
它告诉你为什么它不起作用
function replaceAll(str, from, to) {
let result = str;
for(let i = 0 ; i < str.length ; i++) {
if(str[i]===from) {
result = result.replace(from,to);
}
}
return result;
}
函数replaceAll(str、from、to){
设结果=str;
for(设i=0;i
如果您真的想进行循环,您需要将替换的字符串分配给str
而不是结果,因为您将原始str
用于替换,但分配给result
仅替换字符串的第一个查找。如果使用正则表达式,则可以直接替换所有occurrence
函数replaceAll(str、from、to){
for(设i=0;i console.log(输出);//-->leep’
您可以通过两种方式解决问题:
- 使用带有全局修饰符(
/…/g
)的函数(每个浏览器都支持)替换所有引用
- 使用功能(Chrome 85+、Edge 85+、Firefox 77+、Opera 71+、Safari 13.1+支持;Internet Explorer不支持)
let str='loop';
console.log(str.replace(/o/g,'e'));
log(str.replaceAll('o','e')代码>让我们深入研究您的问题,以便您了解这里真正发生的事情
这就是为什么在for循环完成后,result
变量保持不变的原因
另一件需要注意的事情是,尽管在第一次和第二次迭代中,结果
变量的值是相同的('leop'
),但在第二次循环中,第一次循环中的初始'leop'
被收集(扔掉)
,以便为其分配另一个值(在我们的例子中是另一个'leop'
)这是非常不清楚的,为什么在这里需要一个循环。@NinaScholz处理replace(string,…)
只替换该字符串的第一次出现这一事实。但是整个构造很麻烦,只在from.length==1
woow。。有趣的是str不会改变吗?str
是一个局部变量,由于要传递一个原语,比如字符串,所以需要为字符串指定一个新值。事实上,我使用了循环来研究,但它非常简单!。好的,我会考虑:)通过这样的构造,您应该总是在将字符串传递给<代码> ReGeXP之前。
function replaceAll(str, from, to) {
let result = str;
for(let i = 0 ; i < str.length ; i++) {
if(str[i]===from) {
result = result.replace(from,to);
}
}
return result;
}
function replaceAll(str, from, to) {
let result = ''
for(let i = 0 ; i < str.length ; i++)
if(str[i]===from) {
result = str.replace(from,to)
}
}
return result;
}
1st iteration :
result = 'loop'.replace('o','e') // leop
// result is now 'leop' and str remains 'loop'
2nd iteration :
result = 'loop'.replace('o','e') // leop
// as str remained 'loop', so result will again be 'leop