如何优化Office Script中的结构化正则表达式搜索迭代逻辑?
重构后的Office Script代码
你可以通过维护一个正则规则数组来消除重复逻辑,既提升可维护性,又能保证返回数组的顺序稳定,优化后的代码如下:
function main(workbook: ExcelScript.Workbook, inputString: string): Array<string> { // 定义匹配规则数组,顺序对应返回数组的顺序 const matchRules = [ /(?<![0-9])([0-9]{2,3})[- ]([0-9]{3})[- ]([0-9]{3})(?![0-9])/g, /[Nn][Zz][Dd]/g, /([a-zA-Z]{1,3})-([0-9]{6})-([0-9]{3})(?![0-9])/g, /(?<![0-9])([0-9]{2})[- ]([0-9]{4})[- ]([0-9]{7})[- ]([0-9]{2,3})(?![0-9])/g ]; // 遍历规则数组,执行匹配并生成结果 return matchRules.map(rule => { const matches = inputString.match(rule); return matches ? matches[0] : "no match"; }); }
关键优化点
- 可维护性提升:后续要增减匹配项、调整正则或改变返回顺序,只需要修改
matchRules数组即可,不用重复编写判断逻辑 - 逻辑简化:用
map方法一次性完成所有匹配和结果转换,消除了重复的if-else判断 - 顺序稳定:返回数组的顺序完全由
matchRules的顺序决定,不会出现null干扰顺序的问题 - 性能优化:去掉了不必要的Map操作,直接生成结果数组,代码更高效
另外注意:原代码里的RegExp(/xxx/g)是冗余写法,直接使用正则字面量/xxx/g即可,效果完全一致。
内容的提问来源于stack exchange,提问作者NickW
相关产品推荐
相关产品推荐

