You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级DOMPurify至3.1.6/2.4.9后Gulp压缩遇正则语法错误求助

问题

此前使用DOMPurify 2.3.10搭配Gulp进行文件压缩,一切运行正常。但升级至3.1.6或2.4.9版本后,出现以下错误:

Uncaught SyntaxError: Invalid regular expression: //gm),DATA_ATTR=seal(/: Unmatched ')'

3.1.6版本相关代码:

MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm),
ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm),
TMPLIT_EXPR = seal(/\${[\w\W]*}/gm),
DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/),
ARIA_ATTR = seal(/^aria-[\-\w]+$/);

2.3.10版本相关代码:

MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm),
ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm),
DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/);

问题根源是Chrome将TMPLIT_EXPR中的\${[\w\W]*}识别为模板字面量并替换为空值,导致正则表达式语法错误。需要通过Gulp或其他方式解决该问题且不引入新问题。

解决方案

方法1:调整Gulp压缩工具的模板字面量处理规则

如果使用gulp-uglify或gulp-terser进行压缩,可通过配置禁用模板字面量相关优化,或升级压缩工具到最新版本(新版本通常已修复这类正则解析bug)。

以gulp-terser为例的配置示例:

const terser = require('gulp-terser');

gulp.task('minify-js', () => {
  return gulp.src('src/*.js')
    .pipe(terser({
      compress: {
        // 保留模板字面量结构,避免误解析正则中的${}
        keep_template_literals: true
      }
    }))
    .pipe(gulp.dest('dist'));
});

方法2:修改DOMPurify源码的正则定义

临时修改DOMPurify源码,将正则字面量改为字符串构造形式,避免被浏览器误识别为模板字面量:

// 替换原正则定义
TMPLIT_EXPR = seal(new RegExp('\\${[\\w\\W]*}', 'gm')),

修改后再通过Gulp打包,即可规避语法错误。

方法3:使用DOMPurify官方预编译版本

直接引入DOMPurify官方提供的预编译压缩包,官方版本已处理好正则转义问题,无需自行压缩,可直接避免该错误。

内容的提问来源于stack exchange,提问作者Maldanna Gk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:32:42