Apps Script中使用变量实现字符串词汇匹配次数统计的方法
Apps Script 动态统计字符串关键词出现次数实现
需求背景
在Apps Script开发中,需要对从单元格公式中提取的字符串,统计指定词汇、短语的出现次数。最初尝试硬编码正则的方案仅能匹配固定内容,无法灵活适配动态传入的变量值,同时遇到匹配为空时的运行时报错问题。
常见踩坑点
- 硬编码正则(如
str.match(/Train/g).length)仅能匹配写死的关键词,无法结合变量值动态调整匹配规则 - 手动拼接带分隔符的正则字符串(如拼成
'/Train/g'传入匹配逻辑)会导致规则识别失效,无法正常匹配 - 直接调用
str.match(new RegExp(searchfor, "g")).length时,如果目标字符串中无任何匹配内容,match方法会返回null,直接读取null的length属性会抛出Cannot read property 'length' of null错误
可落地实现代码
function myFunction() { // 待检索的目标字符串(从单元格公式提取的内容) const str = `'=IFERROR(IF('Train Station'!D154 ='A','A: Good - Performing well', IF('Train Station'!D154='B','B: OK', IF('Train Station'!D154='C','C: Do Better', IF('Train Station'!D154='D','D: Give Up')))),'')'`; // 需要统计的关键词/短语(可动态替换为任意变量值) const searchfor = 'Train'; // 核心统计逻辑 const count = (str.match(new RegExp(searchfor, "g")) || []).length; Logger.log(count); }
核心逻辑说明
- 通过
new RegExp(关键词变量, "g")动态生成匹配规则,替代硬编码的正则字面量,实现对变量值的灵活匹配,g标识代表全局检索,遍历完整字符串统计所有匹配项 - 利用逻辑短路特性,在
match结果后拼接|| []:当匹配结果为null(无匹配内容)时,自动将结果替换为空数组,空数组的length为0,从根源上规避读取null属性的报错 - 最终拿到的长度值即为关键词的出现次数,可直接用于后续分支判断(如
if (count == 4))
内容的提问来源于stack exchange,提问作者Glib Gibon
相关产品推荐
相关产品推荐

