字符串替换不适用于迭代...

时间:2020-06-12 06:34:30

标签: javascript

我正在尝试使用以下代码替换字符串中的所有元音,但仅可使用正则表达式工作。如何用于迭代?

 // THIS DOES NOT WORK
    newStr = '';
    for (const c of "aeiou") {
      console.log(c);
      newStr = 'Hello World'.replace(c, '*');
    }
    console.log(newStr); // Prints Hello World to the console
    
    // ONLY THIS WORKS
    newStr = 'Hello World'.replace(/[aeiou]/g, '*');
    console.log(newStr);

4 个答案:

答案 0 :(得分:2)

如果不想使用正则表达式,请使用splitjoin作为一种方式

newStr = 'Hello World';
    for (const c of "aeiou") {
      console.log(c);
      //newStr = 'Hello World'.replace(c, '*');
      newStr = newStr.split(c).join('*');
    }
    console.log(newStr); // Prints Hello World to the console
    
    // ONLY THIS WORKS
    newStr = 'Hello World'.replace(/[aeiou]/g, '*');
    console.log(newStr);

答案 1 :(得分:1)

代码的问题是,每次尝试替换“ Hello World”字符串并将结果分配给newStr时,都在for循环中。但是,在上一次迭代中,您将检查u,因为u在Hello World中未预先设置,因此整个字符串都将分配给newStr。

您应该将newStr初始化为“ Hello World”,然后对其进行替换

var newStr = 'Hello World';
for (const c of "aeiou") {
  console.log(c);
  newStr = newStr.replace(c, '*');
}
console.log(newStr); 

但是请注意,这只会替换匹配字符的一个实例,而不是全部替换,您仍然需要使用regex

newStr = newStr.replace(new RegExp(c, 'g'), '*');

var newStr = 'Hello World';
for (const c of "aeiou") {
  newStr = newStr.replace(new RegExp(c, 'g'), '*');
}
console.log(newStr); 

或拆分并加入字符串

newStr = newStr.split(c).join('*');

var newStr = 'Hello World';
for (const c of "aeiou") {
  newStr = newStr.split(c).join('*');
}
console.log(newStr); 
但是,建议在字符串

上使用String.prototype.replaceAll

答案 2 :(得分:0)

尝试以下方法:

let newStr = 'Hello World';
for (const c of "aeiou") {
    while (newStr.indexOf(c) > -1)
        newStr = newStr.replace(c, "*");
}
console.log(newStr); // Prints Hello World to the console

string.prototype.replace仅替换newStr中第一次出现的c。 string.prototype.replace

答案 3 :(得分:0)

您可以这样操作:

var newStr = 'Hello World';

for (let a of newStr) {
    for (let b of "aeiou") {
        if (a === b) {
            newStr = newStr.replace(a, '*');
        }
    }
}

console.log(newStr);