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

问题描述 投票:0回答:5

我想删除所有辅音字符串中的元音发生前,然后用“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”测试了该程序。为什么会这样?

javascript string
5个回答
1
投票

您可以一次尝试在您的其他下面的代码,看到的变化

else {
  var vowelIndex = newStr.indexOf(str.match(regex)[0]);
  newStr.splice(0, vowelIndex, 'r');
  return newStr.join("");
}

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"

0
投票

你可以只使用一个reg表达式为整个算法,无需没有更多的分割你的字符串。

正则表达式来使用。

/ ^ [^ aouie,AOUIE] +(?= [aouie,AOUIE])/克

当然你也可以调整正则表达式来更适合你,但是这将让你的主要需求。


0
投票

在else语句后立即行了,我只是叫.toLowerCase(),它是固定的:让vowelIndex = newStr.indexOf(str.match(正则表达式)[0] .toLowerCase());


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'));
© www.soinside.com 2019 - 2024. All rights reserved.