if条件下的模式匹配失败

时间:2018-06-28 05:42:56

标签: javascript regex

尝试优化模式匹配代码。旧代码中很少有与来自回调数据的ID相匹配的模式。

var Id =  callbackData.Id

 var pattern1 = /gen/g;
 var pattern2 = /0--google/g;
 var pattern3 = /mail/g;

 var isPattern1 = pattern1.test(Id)
 var isPattern2 = pattern2.test(Id)
 var isPattern3 = pattern3.test(Id)

 if(Id && Id !== 0 && !isPattern1 && !isPattern2 && !isPattern3)
 {
   //return statement
   // function 
 } else {
   //return statement
   //function
 }

为了优化它,我创建了一个包含模式的json文件。正在从json文件读取模式并与ID匹配。

Json file : test.json

{
  "PatternToSearch": {    
    "pattern1"  : "gen",
    "pattern2"  : "^0--google",
    "pattern3"  : "mail"
  }
}

var patternToMatch = require('test.json');
var patternArray = []; 
 Object.keys(patternToMatch.PatternToSearch).forEach(function (key) {
      var value = PatternToMatch.PatternToSearch[key];
      patternArray.push(value);
    });
return Promise.all(patternArray);
.then(patternArrayResult => {
  for (var val in patternArrayResult) {
    var pattern = patternArrayResult[val];
    var patternToCompare = new RegExp(pattern);
    var isPattern = patternToCompare.test(Id);
  }
})

我也尝试过forEach,但是我从函数返回布尔值,而forEach没有返回任何值,所以我在... 无法复制此条件Id && Id !== 0 && !isPattern1 && !isPattern2 && !isPattern3。怎么做?

尝试

if(isPattern){
  if(Id && Id !==0 && isPattern) {
    // return statement
  }
}

,但是当所有模式都与ID不匹配时,此条件将不起作用。因为我在for循环里面只有一次 条件为true,其他时间为false,这会使控制器进入else循环 如何复制条件? (Id && Id !== 0 && !isPattern1 && !isPattern2 && !isPattern3)

1 个答案:

答案 0 :(得分:0)

这是some的工作,如果数组中的任何项导致给定函数返回真实值,则返回true

return patternArray.some(v=>RegExp(v).test(Id));

并在测试中也包含Id的值:

return Id && patternArray.some(v=>RegExp(v).test(Id));

您不需要单独测试Id !== 0,因为零值将被视为虚假值,从而导致&&尽早短路。 (因此,Id && Id !== 0只会产生0true:当该条件为假时,执行流永远无法达到条件Id !== 0,因为测试{{1} }设为零值将早早终止Id流。)