如何在Google Apps Script中用正则实现邮箱大小写不敏感匹配
解决Google Apps Script中忽略大小写匹配编码/邮箱的问题
原脚本通过Map匹配JOBS和USERS表中的编码时,仅支持大小写完全一致的匹配,且存在错误的正则表达式写法。以下是修正后的完整方案:
核心问题分析
原脚本的大小写敏感源于Map的key使用了原始字符串,大小写不同会被判定为不同key;同时你尝试的正则表达式写法完全错误,正则无法直接与数组取值结合使用。
修正后的完整脚本
function updateUserData1() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var jobSheet = ss.getSheetByName('JOBS'); var userSheet = SpreadsheetApp.openById("1Zog54Yh3r5TyEaLLf3lHUbPGAikiu9HBOmBMtbbwwas").getSheetByName('USERS'); // 获取USERS表数据和JOBS表数据 var users = userSheet.getRange("B2:O" + userSheet.getLastRow()).getValues(); var jobsRange = jobSheet.getRange("F2:AW" + jobSheet.getLastRow()); var jobs = jobsRange.getValues(); // 提取JOBS表中的编码和USERS表中的编码 var jobProducts = jobs.map(e => e[7]); var prodCodes = users.map(e => e[1]); // 构建忽略大小写的编码-索引映射:key为小写编码,value为对应USERS表的行索引 var prodMap = prodCodes.reduce((m, v, i) => { if (v) { // 过滤空编码,避免无效映射 m.set(v.toLowerCase(), i); } return m; }, new Map()); // 根据JOBS表的编码(转小写)查找对应USERS表的索引 var indices = jobProducts.map(jobProd => { return jobProd ? prodMap.get(jobProd.toLowerCase()) : null; }); var priceArray = []; // 遍历JOBS数据,获取对应USERS表的邮箱值 jobs.forEach((v, i) => { let companyValue = ""; if (indices[i] !== null) { // 确保找到有效索引,避免数组越界 companyValue = users[indices[i]][3]; } priceArray.push([companyValue]); }); // 将结果写入JOBS表指定列 jobsRange.offset(0, 1, jobs.length, 1).setValues(priceArray); }
关键修改说明
- 忽略大小写匹配:通过
toLowerCase()将所有编码统一转为小写,构建映射表和查找时都使用小写值,彻底消除大小写差异的影响。 - 移除无效正则:删除原代码中错误的正则表达式写法,直接通过数组索引获取USERS表中的邮箱值。
- 空值与错误防护:添加空编码过滤和索引有效性判断,避免空值干扰匹配逻辑,防止因找不到匹配项导致的数组越界错误。
内容的提问来源于stack exchange,提问作者Les
相关产品推荐
相关产品推荐

