Apps Script解析Gmail报Cannot read property 'map' of null求替代方案
报错原因与解决方案
错误根因
String.prototype.match() 方法在正则表达式无匹配结果时会返回null,而非空数组,直接链式调用.map()就会触发Cannot read property 'map' of null错误,这是因为在实际邮件处理场景中,部分邮件内容可能不存在符合匹配规则的文本段。
方案1:最小改动适配原写法
仅需在match调用后追加空数组兜底逻辑即可,无匹配时会返回空数组,不会触发后续map调用报错:
// yourText为你要匹配的原始文本 const result = (yourText.match(/5px">(.*?)<\/b>/g) || []).map(function(val){ return val.replace(/<\/?b>/g,'').replace(/5px">/g,'').trim(); });
方案2:使用matchAll实现更高效的写法
matchAll可以直接拿到正则的捕获组内容,不需要后续额外做两次替换操作,代码更简洁性能也更好:
// 正则保留g修饰符,Array.from的第二个参数直接处理捕获组内容 const result = Array.from(yourText.matchAll(/5px">(.*?)<\/b>/g), match => match[1].trim());
该方案天然适配无匹配场景:无匹配时matchAll返回空迭代器,转成数组后就是空数组,不会抛出任何错误。
可选适配优化
如果你的邮件内容中目标文本段可能跨换行,可给正则增加s修饰符,让.可以匹配换行符,正则修改为/5px">(.*?)<\/b>/gs即可。
内容的提问来源于stack exchange,提问作者Jeff Smith
相关产品推荐
相关产品推荐

