App Script中String.replace(/\s/g,'')处理含空格分隔%的字符串异常
问题原因与修复方案
原因分析
Google Apps Script的String.replace()方法在处理仅由%和空格组成的字符串时存在边缘案例bug:当替换空格为空字符串后,原本的多个%会被错误合并为一个。该bug仅在纯%+空格的场景下触发,包含普通字符的混合场景不受影响。
修复方案
以下几种方法均可绕过该异常行为:
方案1:用split() + join()替代replace()
通过拆分再拼接的方式彻底避开replace()的异常逻辑:
function cleanSpaces(string){ return string.split(/\s/).join(''); }
方案2:使用replaceAll()方法
GAS已支持ES6的replaceAll(),该方法不存在上述bug,可直接替换所有空白字符:
function cleanSpaces(string){ // 替换所有空白字符(含制表符、换行等) return string.replaceAll(/\s/g, ''); // 若仅需替换空格字符,可简化为: // return string.replaceAll(' ', ''); }
方案3:手动修复特殊场景(不推荐)
如果因兼容性限制无法使用replaceAll(),可在replace()后针对纯%的情况做补全:
function cleanSpaces(string){ const cleaned = string.replace(/\s/g, ''); // 检查是否是被错误合并的纯%字符串,修复长度 if (/^%+$/.test(cleaned)) { const originalPercentCount = string.split('%').length - 1; return '%'.repeat(originalPercentCount); } return cleaned; }
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

