Angular 17生产构建时特殊字符转为Unicode的问题求助
解决Angular 17生产构建中正则字符转义问题
问题分析
生产构建时,代码压缩工具(Terser)会将非ASCII字符(如’,U+2019右单引号)转换为Unicode转义序列\u2019,这可能导致正则表达式的匹配行为不符合预期,或是出现语法解析问题。
解决方案
方案1:直接在正则中使用Unicode转义序列
修改原escapeRegExp方法的正则表达式,将’替换为对应的Unicode转义\u2019,避免压缩工具再次转义:
escapeRegExp(value: string): string { return value.replace(/[{}\(\)\^$&%#!@=<>;:,.~`'\u2019\*"\?\/\+\|\[\\\\]|\]/g, ''); }
注:正则中的’并非特殊字符,原本无需添加反斜杠转义,可直接写成'\u2019'。
方案2:修改构建配置,禁用ASCII转义
在angular.json的生产构建配置中,调整Terser的输出设置,禁止将非ASCII字符转为Unicode转义序列:
"configurations": { "production": { "optimization": { "scripts": { "terserOptions": { "output": { "ascii_only": false } } }, "styles": true, "fonts": true }, "outputHashing": "none", "sourceMap": false, "namedChunks": false, "extractLicenses": true, "vendorChunk": false, "buildOptimizer": true } }
此配置会让Terser保留原字符,不再进行ASCII转义处理。
方案3:简化正则表达式
如果无需严格区分单引号类型('和’),可直接用字符集匹配所有单引号相关字符:
escapeRegExp(value: string): string { return value.replace(/[{}\(\)\^$&%#!@=<>;:,.~`[\u0027\u2019]\*"\?\/\+\|\[\\\\]|\]/g, ''); }
用[\u0027\u2019]同时匹配普通单引号(U+0027)和右单引号(U+2019),语法更清晰,也避免转义问题。
内容的提问来源于stack exchange,提问作者sujith karivelil
相关产品推荐
相关产品推荐

