For语句根据模式识别循环遍历数组和数组项到新数组,追加匹配项

时间:2019-03-27 18:37:43

标签: javascript regex

我没有从该函数获得预期的结果。我所期望的是,我将有四个数组,其中包含多个项目。但是,相反,对于控制台中的所有内容我都无法定义。这是我对该功能的说明:

  

您的工作是遍历此数组,并使用正则表达式和Array.push()方法将具有相似性的项目放入四个全新的数组中:

     
      
  • 一个以og结尾且长度不超过3个字母的项目名为og
  •   
  • at结尾且长度超过3个字母的项目命名为at
  •   
  • 一个以数字开头的商品名为numberFirst
  •   
  • 一个名为numberLast的数字结尾的项目
  •   

对于我的if和else if语句,我让他们测试该项目是否与我在顶部创建的表达式匹配。如果匹配,则评估为true。我相信我的if陈述是错误的,或者我是如何创建用于模式识别的正则表达式的。

var mainList = ['catalog', 'dog', 'cat', 'hog', 'muskrat', 'World War 3', 'blog', 'frog', '25th of March', 'bat', 'log', 'March 25', 'slog', '10 Downing street', 'flat', 'fat', 'splat', 'blat', 'frat', 'rat', '23 Skidoo', 'Catch 22', '10 4 Good Buddy', 'fog'];
var re = /$og/; //one named 'og' for items that end with 'og' and are 3 letters long or less//
var re2 = /$at/; //one named 'at' for items that end with 'at' that are longer than 3 letters//
var re3 = /[^0-9]/; //one named 'numberFirst' for items that start with numbers//
var re4 = /$[0-9]/; //one named 'numberLast' for items that end with numbers
var arrayOG = [];
var arrayAT = [];
var arrayNumberFirst = [];
var arrayNumberLast = [];

function loop(item) {
  for (var i = 0; i < mainList.length; i++) {
    if (re.test(item) == true && item.length <= 3) {
      arrayOG.push(item);
      console.log(arrayOG);
    } else if (re2.test(item) == true && item.length > 3) {
      arrayAT.push(item);
      console.log(arrayAT);
    } else if (re3.test(item) == true) {
      arrayNumberFirst.push(item);
      console.log(arrayNumberFirst);
    } else if (re4.test(item) == true) {
      arrayNumberLast.push(item);
      console.log(arrayNumberLast);
    }
  }
}
loop();

1 个答案:

答案 0 :(得分:1)

您要在函数定义中将item声明为函数参数
function loop(item) {
但是稍后在调用函数loop()时,您实际上并没有传递任何东西。
然后,对于每个循环问题,该项目都是不确定的。
代替

function loop(item) {
  for (var i = 0; i < mainList.length; i++) {
    ...
  }
}

您应该尝试

function loop() {
  for (var i = 0; i < mainList.length; i++) {
    const item = mainList[i];
    ...
  }
}