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

存储含正则表达式的对象: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:40:35