javascript replace()相同单词不同替换

时间:2018-06-26 05:15:10

标签: javascript arrays

我正在输入您要输入的命令。 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()(或任何其他此类函数)的函数,因此必须存在
  • 现在该命令不执行任何操作,仅发布args。
  • 它是[i][i],因为现在它是一个双精度数组,就像[ [ 'Hello', 'there,', 'how', 'are', 'you', 'today' ] ],[i] [i]确实得到了正确的东西。
  • 数组很大

1 个答案:

答案 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));