You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动