如何将正则表达式正确赋值给配置对象的test属性?
解决Webpack配置正则表达式序列化问题
问题核心
使用JSON.stringify()处理配置对象时会出现两种不符合预期的情况:
- 若将正则写成字符串形式,输出后会被双引号包裹,不符合Webpack配置的格式要求;
- 若直接使用正则字面量,
JSON.stringify()会将其序列化为空对象{}。
解决方案
不能依赖原生JSON.stringify(),需要自定义序列化逻辑,将正则对象转换为不带引号的字面量格式。
代码实现
config.module.rules.unshift({ test: /ckeditor5-[^/\\]+[/\\]theme[/\\]icons[/\\][^/\\]+\.svg$/, use: ['raw-loader'] }); // 自定义序列化函数 function serializeConfig(obj) { return JSON.stringify(obj, (key, value) => { if (value instanceof RegExp) { // 将正则对象转为字面量格式的字符串 return value.toString(); } return value; }).replace(/"(\/.*?\/)"/g, '$1'); // 移除正则字符串外层的双引号 } fs.writeFileSync("C:\\temp\\config.txt", serializeConfig(config));
效果说明
- 用正则字面量定义
test属性,确保正则表达式的语法正确; - 通过
JSON.stringify()的替换回调,识别并转换正则对象为/xxx/格式的字符串; - 最后用正则替换去掉包裹正则的双引号,得到符合要求的输出格式。
生成的config.txt内容如下:
{ "test": /ckeditor5-[^/\\]+[/\\]theme[/\\]icons[/\\][^/\\]+\.svg$/, "use": [ "raw-loader" ] }
内容的提问来源于stack exchange,提问作者Colin Dawson
相关产品推荐
相关产品推荐

