如何用较少的代码替换大写的所有元音?
var str = "aaeeiioouu";
str=str.replace(/a/g, "A");
str=str.replace(/e/g, "E");
str=str.replace(/i/g, "I");
str=str.replace(/o/g, "O");
str=str.replace(/u/g, "U");
document.write(str);

答案 0 :(得分:6)
replace
接受function
作为第二个参数,您可以使用它并返回大写结果。您也可以修改正则表达式以接受所有元音。您可以使用/[aeiou]/g
var str = "aaeeiioouu";
str=str.replace(/[aeiou]/g, (c) => {
return c.toUpperCase();
});
console.log(str);
根据替换文档:
您可以将函数指定为第二个参数。在这种情况下, 在执行匹配后将调用函数。该 函数的结果(返回值)将用作替换 串。 (注意:上述特殊替换模式没有 适用于这种情况。)请注意,该函数将被多次调用 如果正则表达式中的每个完整匹配将被替换的时间 第一个参数是全局的。
该函数的
arguments
如下:可能的名称:提供的值
匹配:匹配的子字符串。 (对应于$& above。)
p1,p2,... :第n个带括号的子匹配字符串,前提是 replace()的第一个参数是一个RegExp对象。 (对应1美元, 上面是2美元等。)例如,如果给出了/(\ a +)(\ b +)/,则p1是 匹配\ a +,而p2代表\ b +。
偏移:整个匹配子字符串的偏移量 被检查的字符串。 (例如,如果整个字符串是'abcd', 并且匹配的子字符串是'bc',那么这个参数将是1.)
string :正在检查整个字符串。
答案 1 :(得分:0)
虽然效率不如上面的正则表达式.replace()
解决方案,但这里有一个替代方法,可以遍历每个字母并将元音大写。
var str = "aaeeiioouuxyz";
str = str.split('');
for (var i = 0; i < str.length; i++)
if ("aeiou".indexOf(str[i]) > -1) str[i] = str[i].toUpperCase();
console.log(str.join(''));
&#13;