我想删除所有辅音字符串中的元音发生前,然后用“R”代替它。这意味着,“史酷比”将成为“rooby”,“xylographer”将成为“rographer”等。这是我想出了算法:1。检查输入类型不是字符串。 2.使用一个变量(中newstr)保持小写转换和分裂字。 3.声明的变量(arrWord)以保持所述阵列的长度。 4.另一个称为正则表达式的变量,以检查是否一个字符串以辅音5.可变newArr开始保持该最终结果。 6.搜索通过数组,如果字符串不以辅音开始加入它,并将其返回。 7.否则,继续寻找其中第一个元音的字出现。 8.当发现,元音occurence之前删除所有字符(辅音)并用的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”测试了该程序。为什么会这样?
您可以一次尝试在您的其他下面的代码,看到的变化
else {
var vowelIndex = newStr.indexOf(str.match(regex)[0]);
newStr.splice(0, vowelIndex, 'r');
return newStr.join("");
}
难道不是这样更容易?还是我失去了一些东西?
'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"
你可以只使用一个reg表达式为整个算法,无需没有更多的分割你的字符串。
正则表达式来使用。
/ ^ [^ aouie,AOUIE] +(?= [aouie,AOUIE])/克
当然你也可以调整正则表达式来更适合你,但是这将让你的主要需求。
在else语句后立即行了,我只是叫.toLowerCase(),它是固定的:让vowelIndex = newStr.indexOf(str.match(正则表达式)[0] .toLowerCase());
我喜欢让我的代码简洁易读
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'));