Javascript 函数用于检查字母组合是否出现在随机单词序列中,并确定它们的确切位置

Javascript 函数用于检查字母组合是否出现在随机单词序列中,并确定它们的确切位置,javascript,arrays,random,Javascript,Arrays,Random,我在javascript中创建了一个函数,以生成具有特定长度的随机字符串(大写/小写或两者兼有) function randomString(max, option) { var rNum = []; if (option.toLowerCase() === "lowercase") { for (let i = 0; i < max; i++) { var randomNumber = Math.floor(Math.r

我在javascript中创建了一个函数,以生成具有特定长度的随机字符串(大写/小写或两者兼有)

    function randomString(max, option) {
      var rNum = [];
      if (option.toLowerCase() === "lowercase") {
        for (let i = 0; i < max; i++) {
          var randomNumber = Math.floor(Math.random() * (122 - 97) + 97);
          rNum.push(randomNumber);
        }
      } else if (option.toLowerCase() === "uppercase") {
        for (let i = 0; i < max; i++) {
          var randomNumber = Math.floor(Math.random() * (90 - 65) + 65);
          rNum.push(randomNumber);
        }
      } else if (option.toLowerCase() === "both") {
        for (let i = 0; i < max; i++) {
          var n = Math.floor(Math.random() * (122 - 65) + 65);
          while ([91, 92, 93, 94, 95, 96].includes(n)) {
            //If the random number is between 90 and 97 then we keep generating new numbers:
            n = Math.floor(Math.random() * (122 - 65) + 65);
          }
          rNum.push(n);
        }
      } else {
        return "Second parameter not valid, please type 'lowercase','uppercase' or 'both'";
      }
      var word = "";
      for (let i = 0; i < rNum.length; i++) {
        var letter = String.fromCharCode(rNum[i]);
        word += letter;
      }
      return word;
    }
我还是一个编程新手,所以如果我犯了任何愚蠢的错误,请让我休息一下:)
顺便说一句,如果你们对如何以更有效的方式完成我已经做过的事情有任何建议,我将不胜感激。

您可以使用javascript中的simple.match()函数在另一个字符串中查找字符串

var myString = randomString(100, "both");
// myString = "fAuqxBfkXprhvRqOGLPmTiFbhrZtjXXMFwircAGBBtIkiDbGHPvYymMlabJyeAKUtIYNedUpNPlaeEcjIsSeEtOUriHTuCtbpNZX"

var result = myString.match('rZtjX');
// result[0] is your search string...the "letters" value
// result[1] is where the string was found

// If you want to get all occurrences where the search string was found you can use the function below. 

findOccurrences = (needle, haystack) => {
    const pieces = haystack.split(needle);
    if (!pieces.length) {
        return console.log('No Matches');
    }
    let index = 0;
    pieces.forEach((piece) => {
        index += piece.length;
        console.log(needle, ' found at ', index);
        index += needle.length;
    });
}
findOccurrences('LPmT', myString);
LPmT  found at  17
LPmT  found at  47
LPmT  found at  81
LPmT  found at  99
LPmT  found at  112
接受定义起始偏移的第二个参数,因此可以使用该参数循环并查找每个引用。您只需要使起点立即超过每次迭代的最后一次出现。下面是我编写函数的方法:

功能indexOfAll(针、草堆){
var指数=[];
var指数=0;
而((索引=haystack.indexOf(针,索引))>-1){
指数。推送(指数);
指数+=针的长度;
}
回报指数;
}

控制台.日志(indexOfAll(“燕麦”、“船上的山羊”)您可以将它们的输入转换为正则表达式

const inputRegex = new RegExp(input, 'g')
然后可以使用
string.matchAll()
获取所有匹配实例

const matches = randomLetters.matchAll(inputRegex)
但这给了你一个迭代器。要将其作为数组,您可以执行以下操作:

const matches = [...randomLetters.matchAll(inputRegex)]
现在,matches中的每个项都是一个对象,其键
index
表示其在字符串上的位置


可以

但是这个.match()函数只给出第一次出现的位置,对吗?所以它很像indexOf()@VinyZiks更新了postNice和simple解决方案,但请注意,这仍然被认为是实验性的,因此它与internet explorer、microsoft edge、safari或safari mobile不兼容。
const matches = [...randomLetters.matchAll(inputRegex)]