我想一起得到随机字母,用cvvcv(辅音和元音)等指定模式生成奇怪的单词。没有像需要的那样的辅音变化。
问题是,当我尝试做一个时,我必须指定单词的长度。但是,我希望输出中的字符数在模式中相同。我的意思是长度将由模式的字符数预先定义。
一个小提琴的例子很棒,非常感激。
答案 0 :(得分:2)
你也可以试试这个:
function replacePattern(pattern) {
var possibleC = "BCDFGHJKLMNPQRSTVWXZ";
var possibleV = "AEIOUY";
var pIndex = pattern.length;
var res = new Array(pIndex);
while (pIndex--) {
res[pIndex] = pattern[pIndex]
.replace(/v/,randomCharacter(possibleV))
.replace(/c/,randomCharacter(possibleC));
}
function randomCharacter(bucket) {
return bucket.charAt(Math.floor(Math.random() * bucket.length));
}
return res.join("").toLowerCase();
};
答案 1 :(得分:0)
如果你设法用C ++做到这一点,那么在JavaScript中重新创建逻辑就不会有问题。
无论如何,我为你准备了一个小片段:
var createWordFromPattern = function(pattern) {
var resultStack = [];
for(var i=0; i<pattern.length; i++) {
var sign = pattern.charAt(i);
var signResult = getRandomSubstituteForSign(sign);
if(signResult !== null) {
resultStack.push(signResult);
}
}
return resultStack.join("");
}
var getRandomSubstituteForSign = function(sign) {
var vowels = ['a', 'e', 'i', 'o', 'u'];
var consonants = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l']; //just added some for demonstration
if(sign === 'c') {
return consonants[Math.floor(Math.random()*consonants.length)]
}
if(sign === 'v') {
return vowels[Math.floor(Math.random()*vowels.length)]
}
return null;
}
document.write(createWordFromPattern("cvvcv"));
&#13;
您可以按Run code snippet
几次以查看结果。
它非常冗长,缺少许多辅音,但我认为你可以理解如何解决这个问题。
如下所示,它会将模式String中的c
转换为辅音数组中的随机条目,并将v
转换为元音数组中的随机条目。模式字符串中的每个其他字符都将被忽略。
例如,可以通过添加更多符号的检测来轻松扩展,但这只是为了让您了解如何解决问题。