我正在尝试使用以下代码替换字符串中的所有元音,但仅可使用正则表达式工作。如何用于迭代?
// 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);
答案 0 :(得分:2)
如果不想使用正则表达式,请使用split
,join
作为一种方式
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);