猿问

JS 正则表达式返回 -1 & 0

我的任务如下:

  1. 取一个字符串

  2. 在新行上打印每个元音(按顺序),然后...

  3. 在新行上打印每个辅音(按顺序)

我发现的问题是正则表达式。我最初使用...

/[aeiouAEIOU\s]/g

但这会用元音返回0,用辅音返回-1(所以一切都反过来发生)。我真的很难理解为什么,并且无法为我的生活找到答案。最后,它很简单,只是反转字符串,但我想知道为什么会以这种方式发生。任何人都可以帮忙吗?


let i;

let vowels = /[^aeiouAEIOU\s]/g;

let array = [];

function vowelsAndConsonants(s) {

    for(i=0;i<s.length;i++){

        //if char is vowel then push to array

        if(s[i].search(vowels)){

           array.push(s[i]);         

        }

        

    }

    for(i=0;i<s.length;i++){

        //if char is cons then push to array

        if(!s[i].search(vowels)){

           array.push(s[i]);         

        }      

    }

    for(i=0;i<s.length;i++){

        console.log(array[i]);    

    }

}


vowelsAndConsonants("javascript");


开心每一天1111
浏览 201回答 4
4回答

白猪掌柜的

if(vowels.test(s[i])){如果它匹配,它将返回 true 或 false,或者,如果你想修复你的代码,它是你想要的。-1 不是假的,因此 if 语句将无法正常工作。-1 是搜索在未找到匹配项时返回的内容。它必须这样做,因为返回匹配的索引位置,并且索引可以是从0到无穷大的任何地方,因此只有负数可用于指示不存在的索引:MDN search()引用if(s[i].search(vowels) !== -1){if(s[i].search(vowels) === -1){search()下面是一个与元音或任何字母或其他匹配的正则表达式,有效地将元音,辅音和其他所有内容分成3个捕获组。这样,您就无需逐个字符进行测试并手动将它们分开。然后迭代并将它们推送到具有 for-of 循环的各自数组中。const consonants = [], vowels = [], other = [];const str = ";bat cat set rat. let ut cut mut,";for(const [,cons,vow,etc] of str.matchAll(/([aeiouAEIOU])|([a-zA-Z])|(.)/g))&nbsp; cons&&consonants.push(cons) || vow&&vowels.push(vow) || typeof etc === 'string'&&other.push(etc)console.log(consonants.join('') + '\n' + vowels.join('') + '\n' + other.join(''))

莫回无

我认为你没有正确理解你的正则表达式是如何工作的。在括号中,您只定义了一组要匹配的字符,并且通过将插入记号用作组中的第一个,您说您希望它与除插入记号中的字符之外的所有内容匹配。可悲的是,你没有提供输入和预期输出的示例,所以我只是猜测,但我认为你可以执行以下操作:/[^aeiouAEIOU\s]/g[^]let s = "avndexleops";let keep_vowels = s.replace(/[^aeiouAEIOU\s]/g, '');console.log(keep_vowels);let keep_consonants = s.replace(/[aeiouAEIOU\s]/g, '');console.log(keep_consonants);请提供预期输入和输出的示例。

皈依舞

您使用了:/[^aeiouAEIOU\s]/g而不是:/[aeiouAEIOU\s]/g^表示“不”,因此您的正则表达式计算所有辅音。/[^aeiouAEIOU\s]/g

翻阅古今

有几个内置函数可用:let some_string = 'Mary had a little lamb';let vowels = [...some_string.match(/[aeiouAEIOU\s]/g)];let consonents = [...some_string.match(/[^aeiouAEIOU\s]/g)];console.log(vowels);console.log(consonents);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答