Javascript 如何将字符串分类为';好'';坏的';,和';混合';基于元音和辅音的序列

Javascript 如何将字符串分类为';好'';坏的';,和';混合';基于元音和辅音的序列,javascript,string,loops,text-classification,Javascript,String,Loops,Text Classification,我想把字符串分为三种类型:好的、坏的或混合的。如果一个字符串有3个连续的元音或5个连续的辅音,或者两者都有,那么它被归类为坏的。否则它被归类为好的。英语字母表中的元音是[“a”、“e”、“i”、“o”、“u”],其他所有字母都是辅音 字符串还可以包含字符?,可以用元音或辅音替换。这意味着如果?是元音,字符串“aa”可能是坏的;如果是辅音,则字符串“aa”可能是好的。这种字符串被归类为混合字符串 实现一个函数,该函数接受字符串s,并返回其类别:good、bad或mixed 以下是我拥有的当前代码:

我想把字符串分为三种类型:好的、坏的或混合的。如果一个字符串有3个连续的元音或5个连续的辅音,或者两者都有,那么它被归类为坏的。否则它被归类为好的。英语字母表中的元音是[“a”、“e”、“i”、“o”、“u”],其他所有字母都是辅音

字符串还可以包含字符
,可以用元音或辅音替换。这意味着如果
是元音,字符串“aa”可能是坏的;如果是辅音,则字符串“aa”可能是好的。这种字符串被归类为混合字符串

实现一个函数,该函数接受字符串
s
,并返回其类别:good、bad或mixed

以下是我拥有的当前代码:

函数分类字符串{
如果(s)包括(“?”),则返回“混合”;
对于(变量i=0;i}
这里有一个“几乎”的答案

函数是元音{
返回s==“a”| s==“i”| s==“o”| s==“u”| s==“e”;
}
风险值输入=[“aaa”、“AAAB”、“AAABBBBB”、“aa?bbbb”、“aa”、“bbaa?”]
//坏坏坏混合

对于(var i=0;i定义两个regexp,一个用于mixed,一个用于bad)

bad
regexp只查找三个连续的元音或五个连续的辅音。
mixed
regexp查找相同的内容,但使用lookahead
(?=
)确保在接下来的三个或五个字符中的某个地方有一个问号

const bad=/[aeiou]{3}|[^aeiou?]{5}/;
常数混合=/(?=.{0,2}\)[aeiou?]{3}|(?=.{0,4}\?)[^aeiou]{5}/;
功能分类{
返回坏。测试?“坏”:混合。测试?“混合”:“好”;
}
['abcde','aeibbb','xxaa?s','aavwxy?aa','abcdfga','aa?bbbb']

console.log(s,classify(s));
听起来像是你在试图找人来解决你的考试。作为一种帮助,使用regEx,你可以使用这样的结构/[aeiou]{3,}/gi来确定一行中是否至少有三个元音。我建议你更好地了解regEx及其许多方面(虽然有很多好的方法。@rasmeister我尝试了你的解决方案,但下面的代码似乎不起作用。你知道为什么吗?如果(s[I].match(/[aeiou]{3}/)返回'bad',你不需要循环。只需使用
/[aeiou]{3,}/i
要对整个字符串进行测试,
s
。如果输入包含一个坏的子字符串和一个混合的子字符串,那么总体上它被认为是坏的还是混合的?不应该将
aa?bbbbbb
设置为“混合”吗?@torazaburo否,因为这两种可能性都会导致它失败(现在)对于
aa?bbbb
,返回
mixed
,我认为这是正确的,因为没有“坏”子字符串,只有“混合”子字符串。如果您不同意,请询问OP。考虑到“?”的可能值可以是元音或辅音。因此对于给定的输入“aa?bbbbbb”,需要“aaabbb”或“aabbb”,两者都是坏的。