在元音之前删除字符串中的所有辅音然后添加一个字符

时间:2018-04-22 19:53:39

标签: javascript string

我想在元音出现之前删除字符串中的所有辅音,然后用'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'。为什么会这样?

5 个答案:

答案 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'));