You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:37:33