Google Apps Script中实现日历事件描述的多条件模糊匹配问题求助
Google Apps Script中实现日历事件描述的多条件模糊匹配问题求助
嘿,我完全懂你遇到的烦恼——精确匹配对用户太不友好了,大小写、缩写稍微变一点就识别失败,而且JavaScript这种“没报错但逻辑根本不对”的情况真的很磨人😅
先给你拆解下之前写法的问题:
- 你用
description.includes("ASM Salford" || "Salford")这种写法时,JavaScript里的逻辑或||会返回第一个“真值”,也就是"ASM Salford",所以这个判断其实等价于只检查描述里是否包含"ASM Salford",后面的条件根本没生效,这就是为什么没报错但其他关键词匹配不上。 includes()方法不支持通配符*,所以description.includes("*ASM*")只会匹配描述里真的包含*ASM*这几个字符的情况,而不是你想要的“包含ASM任意位置”的模糊匹配。
下面给你两个实用的解决方案,能覆盖大小写、缩写等各种用户输入情况:
方案1:统一大小写后多条件判断
先把事件描述转成小写(或大写),再和小写的关键词逐一匹配,这样不管用户输入大写、小写还是混合大小写都能识别:
// 先把描述转成小写,统一匹配规则 const lowerCaseDescription = description.toLowerCase(); // 用||连接多个includes判断,覆盖所有想要匹配的关键词 if (lowerCaseDescription.includes("asm salford") || lowerCaseDescription.includes("salford") || lowerCaseDescription.includes("asm sal")) { asmsalfordsheet.getRange(i+12,1).setValue(startTime); asmsalfordsheet.getRange(i+12,2).setValue(title); }
方案2:用正则表达式实现更灵活的模糊匹配
正则表达式可以一次性处理不区分大小写、多关键词匹配的需求,代码更简洁:
// 正则表达式里的|表示“或”,i表示忽略大小写 // 这个正则会匹配包含ASM、Salford、ASM Sal任意一个的描述 if (/ASM|Salford|ASM Sal/i.test(description)) { asmsalfordsheet.getRange(i+12,1).setValue(startTime); asmsalfordsheet.getRange(i+12,2).setValue(title); }
如果想要更精准的匹配(比如只匹配ASM开头的内容),还可以调整正则规则,比如/ASM.*Salford|Salford/i会匹配ASM后面跟着Salford,或者单独的Salford。
两种方案都能解决你的问题,方案1更直观适合关键词少的场景,方案2更适合复杂的匹配需求~
备注:内容来源于stack exchange,提问作者WeesieScript




