我想在元音出现之前删除字符串中的所有辅音,然后用'r'替换它。 这意味着'scooby'将成为'rooby','xylographer'将成为'rographer'等等。这是我提出的算法: 1.检查输入类型是否不是字符串。 2.使用变量(newStr)保存小写转换和拆分字。 3.声明一个变量(arrWord)来保存数组的长度。 另一个名为regex的变量用于检查字符串是否以辅音开头 5.变量newArr保存最终结果。 6.搜索数组,如果字符串不是以辅音开头 加入并返回它。 7.否则继续寻找单词中第一个元音出现的位置。 8.找到后,在元音出现之前删除所有字符(辅音) 并用r代替它们。 9.将阵列加入到一起。
我能够想出这个:
const scoobyDoo = str => {
if(typeof str !== 'string'){
return 'This function accepts strings only';
}
let newStr = str.toLowerCase().split('');
let arrWord = newStr.length;
let regex = /[aeiou]/gi;
for (let i = 0; i < arrWord; i++){
if (newStr[0].match(regex)) {
let nothing = newStr.join('');
return nothing;
}
else {
let vowelIndex = newStr.indexOf(str.match(regex)[0]);
newStr.splice(0, vowelIndex, 'r');
return newStr.join('');
}
}
}
console.log(scoobyDoo('scOoby'));
我通过大写第一个元音索引来再次测试程序,而不是'rooby'我得到'rscooby'。为什么会这样?
答案 0 :(得分:1)
您是否可以尝试使用其他代码中的以下代码并查看更改
else {
var vowelIndex = newStr.indexOf(str.match(regex)[0]);
newStr.splice(0, vowelIndex, 'r');
return newStr.join("");
}
答案 1 :(得分:1)
这样不容易吗?或者我错过了什么?
'xylographer'.replace(/^\s*[^aieou]+(?=\w)/i,function(m,o,s){return "r"})
//"rographer"
'scooby'.replace(/^\s*[^aieou]+(?=\w)/i,function(m,o,s){return "r"})
//"rooby"
答案 2 :(得分:0)
你可以在整个算法中使用一个reg表达式,而不需要再拆分你的字符串了。
使用正则表达式。
/ ^ [^ aouie,AOUIE] +(?= [aouie,AOUIE])/ g
当然你可以重新调整regexp以适应你,但这将满足你的主要要求。
答案 3 :(得分:0)
在else语句之后的行上,我刚刚调用了.toLowerCase()并修复了它: let vowelIndex = newStr.indexOf(str.match(regex)[0] .toLowerCase());
答案 4 :(得分:0)
我喜欢保持我的代码简单易读
function pattern(str){
var vowelIndex = str.indexOf(str.match(/[aeiou]/)); //returns index of first vowel in str
return "r" + str.slice(vowelIndex);
}
console.log(pattern('xylographer'));