我正在输入您要输入的命令。 I'm a noun
,该命令返回I'm a <random noun>
,与动词和形容词相同,但是,我遇到了一个问题。我想用例如replace()替换每个noun
的一个随机名词,但又不能替换一个同一个名词,所以我不能使用/ g。
这是我到目前为止所拥有的:
const arga = args;
const start = [arga];
console.log(start);
for (let i=0;i<start.length;i++) {
console.log(start[i][i]);
if (start[i][i] == "adjective")
arg.join("").replace("adjective",randA(adjs));
if (start[i][i] == "noun") arga.join(" ").replace("noun", randA(nouns));
if (start[i][i] == "number") arga.join(" ").replace("number", rand());
if (start[i][i] == "verb") arga.join(" ").replace("verb", randA(verbs));
}
message.channel.send(arga);
一些注意事项:
arga.replace
不是没有.join()(或任何其他此类函数)的函数,因此必须存在[i][i]
,因为现在它是一个双精度数组,就像[ [ 'Hello', 'there,', 'how', 'are', 'you', 'today' ] ]
,[i] [i]确实得到了正确的东西。答案 0 :(得分:1)
您可以使用全局replace
,只需传递一个函数(不是函数调用,而只是一个函数),然后从数组中选择而不替换(从数组中删除随机项)选择时),例如:
const str = "I'm a noun and a noun and a noun and yet another noun";
const nounReplacer = (() => {
const arr = ['foo', 'bar', 'baz', 'qux', 'corge'];
return () => {
const randomIndex = Math.floor(Math.random() * arr.length);
return arr.splice(randomIndex, 1)[0];
};
})();
console.log(str.replace(/\bnoun\b/g, nounReplacer));