我的函数应该将输入字符串中的元音替换为其大写版本("a"变成"a", "dog"变成"dog")
它接受一个字符串并创建一个数组来存储和返回修改后的输出
function LetterChanges(str) {
var array=[];
var n =str.length;
for (var i =0;i<n;i++){
if (/[a-z]/i.test(str[i])){
if (array[i]==="a" || array[i]==="e" || array[i]==="i" || array[i]==="o"|| array[i]==="u")
{
array[i]=array[i].toUpperCase();
};
}
return array;
}
为什么我的array[i]=array[i].toUpperCase()
不能用它的大写值替换小写值?
当我打印我的数组时,它仍然有小写的值,尽管我将新大写的值赋给该索引?
如何在替换函数内使用RegExp
?它非常非常简单!
您可以使用一个函数来详细描述要替换的字符串,然后将其返回给replace
函数。在你的例子中,它将只返回元音的大写值。
代码如下:
function LetterChanges(str) {
return str.replace(/[aeiou]/g, function(s) { return s.toUpperCase() });
}
的例子:
LetterChanges("hello!");
> "hEllO!"
LetterChanges("aeiou");
> "AEIOU"
LetterChanges("dntrplc");
> "dntrplc"
在JavaScript中,字符串是不可变的:
var s = "dog";
s[1] = 'O'; // Does nothing!
因此,每次都必须创建一个新字符串。您可以创建这样一个方法:
String.prototype.replaceAt = function(index, character)
{
return this.substr(0, index) + character + this.substr(index+character.length);
};
这是你的代码的工作副本,将利用这个函数(我修复了你的一些问题):
String.prototype.replaceAt = function(index, character)
{
return this.substr(0, index) + character + this.substr(index+character.length);
};
function LetterChanges(str) {
for (var i =0;i<str.length;i++)
{
if (/[a-z]/i.test(str[i])) //Note: This test is pretty useless
{
if (str[i]==="a" || str[i]==="e" || str[i]==="i" || str[i]==="o"|| str[i]==="u")
{
str = str.replaceAt(i, str[i].toUpperCase());
}
}
}
return str;
}
document.write(LetterChanges("dog")); // Print dOg
我认为你需要初始化你的数组。也就是这个
var array=[];
应该var array=str.split('');
你的函数缺少一个右括号('}')。
你知道你可以使用一个函数来替换匹配的文本吗?
function uppercaseVowels(str){
return str.replace(/([aeiou])/g, function(a, b){
return b.toUpperCase();
});
}
var s='敏捷的红色狐狸跳过了懒惰的棕色狗';
uppercaseVowels (s)
/*返回值:(String)敏捷的红色狐狸跳过了懒惰的棕色狗。*/