我不知道如何写这个问题的标题,因为这是一个多步骤的问题!
背景知识:我想结合自己在英国文学和语法方面的背景,对“喜欢繁育的”模因诗的热爱以及新兴的JavaScript知识来创建“喜欢繁育的”诗词生成器。
基本上,用户输入一个单音节的名称/名词,并根据该单词产生押韵诗。该第一位的逻辑如下:
元音-或者,如果是最后一个字母,则仅包含“y”)
元音
问题是,我不确定如何处理第三步和第四步。 (我对使用jQuery或javascript库的解决方案持开放态度,但是由于我仍然是初学者,因此除了从头开始编写纯JavaScript之外,我没有花太多精力去编写任何东西。
注意:如果长度上限有帮助,则9个字符是有意义的,因为英语中最长的单音节单词为9个字母长。
我的第一个想法是做一个条件语句,例如:
var noun = document.getElementById('noun').value; // noun input by user
var n = noun.str.length; // length of unknown word
var place = 0
var firstVow; // location of first vowel
while (place < 10) {
// can you even do nested while loops/conditionals like this?
if (noun.charAt(place) == 'a' ||
noun.charAt(place) == 'e' ||
noun.charAt(place) == 'i' ||
noun.charAt(place) == 'o' ||
noun.charAt(place) == 'u'||
noun.charAt(n) == 'y') {
firstVow = noun.indexOf(place);}
else {
place++;
}
}
var numSel = n - firstVow; // number of characters to select equals string length minus location of the first vowel
var nounSel = noun.substr(firstVow, numSel); // selection to compare to end-rhymes
从理论上讲(至少我认为-如果我错了,请纠正我),这使我发现第一次出现a / e / i / o / u / word-terminal-y然后拉用来比较各种韵律的子串...但是后来我迷路了。
我正在编译可能的尾韵列表,但是我不确定如何将它们与子字符串进行比较(它们将是吨,尤其是拼写不同的字符串)。如果我为每种押韵的声音制作了一个变量,并使用了一个数组用于不同的拼写,是否有办法检查字符串是否与数组中的任何一个元素匹配?我试图尽可能避免使用具有一百或多个条件的条件语句。
任何帮助或批评将是最欢迎的!
编辑示例:
我所说的“可能的韵末列表”的一些示例:
使用示例进行逻辑检查:
我的主要障碍是将选定的子字符串“ott”与我的可能的最终韵律进行比较。如果我这样编排韵:
var ay = ["ay", "eigh", "ei"];
var eye = ["y", "eye", "aye", "ye"];
var ah = ["a", "ah", "aw"];
var ot = ["ot", "ott", "ought", "aught"];
然后可以检查子字符串是否匹配数组中的任何一个选项?那可能是我可以使用正则表达式的另一个地方吗?
最佳答案
为了获得结尾,您可以使用正则表达式,该表达式查找零个或多个元音,后跟一个元音或y
,然后查找字符串的末尾;或者查找一组元音,后跟非元音,然后查找字符串的末尾。
function getEnding(word) {
return (word.match(/[aeiou]*[aeiouy]$|[aeiou]+[^aeiou]+$/) || [''])[0];
}
console.log(['scott', 'bay', 'by', 'saw', 'bot', 'uncaught'].map(getEnding));