存储含正则表达式的对象:JSON与XML哪个更高效?Electron+SQLite场景
解决Electron中SQLite存储含正则表达式对象的优雅方案
自定义JSON序列化/反序列化(推荐)
直接利用JSON原生的序列化钩子,手动处理RegExp类型,无需额外依赖,完美适配复杂嵌套对象:
// 序列化:把正则转为带标记的结构化对象 function serializeObj(obj) { return JSON.stringify(obj, (key, val) => { if (val instanceof RegExp) { return { $isReg: true, source: val.source, flags: val.flags }; } return val; }); } // 反序列化:把标记对象转回正则 function deserializeObj(str) { return JSON.parse(str, (key, val) => { if (typeof val === 'object' && val.$isReg) { return new RegExp(val.source, val.flags); } return val; }); }
使用示例
// 原始对象 const originalObj = { name: "my regexp", regexp: /some\spattern/i }; // 序列化后存入SQLite const serialized = serializeObj(originalObj); // 执行SQL插入:INSERT INTO your_table (data) VALUES (?) // 从SQLite取出后反序列化 const retrievedStr = // 从数据库获取的字符串 const restoredObj = deserializeObj(retrievedStr); // restoredObj.regexp 就是原始的正则表达式
这个方案会自动处理对象中所有嵌套的正则,不用手动遍历转换,代码简洁易维护。
拆分正则字段存储(适合简单结构)
如果你的对象结构相对固定,也可以直接把正则的模式和标志拆成单独字段存储,比如表结构设计为:
- name TEXT
- regex_source TEXT
- regex_flags TEXT
存储时提取regexp.source和regexp.flags分别存入对应字段,读取时再用new RegExp(source, flags)重建正则。但这种方法只适合结构简单的对象,复杂嵌套场景下不如第一种方案灵活。
内容的提问来源于stack exchange,提问作者Samuel Thorval
相关产品推荐
相关产品推荐

