如何优化正则表达式的结果

时间:2019-07-01 14:08:05

标签: regex google-apps-script

function getPrecedents(thisFormula){

var exp = /(\w+\!)?\$?[A-Z]{1,}(?:\d+)?(\:?\$?\w+)*(?!\()\b/gm;
var results=[];
var result;


while ((result=exp.exec(thisFormula))!== null){
    results.push(result);   
}
 return results;
}  

从上面的代码中,我得到以下结果

Trigger_Hires!$AA$15
AD$7
Trigger_Hires!$AC60
Trigger_Hires!$AB60
Rev
Import_Staffing!AD$16
Trigger_Hires!$AC60
Trigger_Hires!$AB60
Customers
Import_Staffing!AD$19
Trigger_Hires!$AC60 

我想消除带有修订的regexp或2nd loop的结果,如Rev和Customer之类的字母

1 个答案:

答案 0 :(得分:0)

我建议在将匹配项添加到results数组之前添加检查:

while (result=exp.exec(thisFormula)) { 
   if (!/^[A-Za-z]+$/.test(result[0])) 
      results.push(result[0]); 
}

请注意,您需要访问result[0]才能获取整个正则表达式匹配值。要检查匹配值是否全部为字母,请使用^[A-Za-z]+$正则表达式:^声明字符串开头的位置,[A-Za-z]+匹配1个以上的字母,而$声明字符串末尾的位置。