gpt4 book ai didi

javascript - Electron ipc 上的 RegExp 变成普通对象

转载 作者:行者123 更新时间:2023-11-28 05:32:33 25 4
gpt4 key购买 nike

我正在 Electron 中构建一个小应用程序,需要将带有正则表达式的过滤器对象从渲染器进程发送到主进程。我在渲染器进程中使用以下代码来调用主进程上的方法:

const remote = require('electron').remote,
Filter = remote.require('./filter.js'),
filterInstance = new Filter();

let filter = {
$regex: new RegExp(/inventaris/i)
};

filterInstance.find(filter);

在渲染过程中filter.$regex instanceof RegExp返回true。在主进程上 filter.$regex instanceof RegExp 返回 false。

经过一番挖掘,我发现在主过程中 filter.$regex.constructor 确实返回 [Function: RegExp]

问题是第三方库(NeDB)检查变量是否是真正的正则表达式正在使用:

exports.isRegExp = function(obj){return Object.prototype.toString.call(obj) === '[object RegExp]'};

返回 false。除此之外,如果不将正则表达式 package 在 new RegExp() 中,则该正则表达式根本无法工作。

最佳答案

通常,通过 Electron IPC 发送的任何内容都会首先序列化为 JSON,如果您调用 JSON.stringify(/inventaris/i),您将得到 {},其中是可能会被发送的内容。由于默认序列化在这种情况下不起作用,因此您需要将正则表达式转换为将被序列化为某种形式的内容,您可以在另一端反序列化后将其转换回正则表达式。例如:

const originalRegex = /inventaris/i
// this is what should be sent via IPC
const payload = { source: regex.source, flags: regex.flags }
// convert the payload back to a Regexp on the other end
const reconstructedRegex = new Regexp(payload.source, payload.flags)

关于javascript - Electron ipc 上的 RegExp 变成普通对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39579222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com