【问题标题】:How to refine results of a regular expression如何细化正则表达式的结果
【发布时间】:2019-07-01 14:08:05
【问题描述】:
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 

我想通过修改的正则表达式或第二个循环消除像 Rev 和 Customers 这样的字母的结果

【问题讨论】:

  • 谢谢维克托。那行得通!但我不明白。我是正则表达式的新手。我不明白为什么索引为 0 结果 [0]。你能解释一下吗?

标签: regex google-apps-script


【解决方案1】:

我建议在将匹配项添加到 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+ 个字母,$ 断言字符串末尾的位置.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多