如何将正则表达式保存到Redux存储中?

示例:

我有正则表达式保存在对象中:

const regexes = {
   name: /^[a-zA-Z0-9_]*$/
}

将这个对象保存到redux存储后,正则表达式会丢失(解析为空对象):
// Dispatch
dispatch(setRegexes(regexes))
// Redux Dev Tools:
{
   name: {}
}

即使将正则表达式作为有效载荷接收到 reducer 中,它也可以:
// Reducer
case 'SET_REGEXES':
   console.log(payload.regexes) // {name: /^[a-zA-Z0-9_]*$/}
   return {...store, regexes: payload.regexes}
break;

这意味着有效负载很可能是stringified到JSON,而 regex丢失了

这有一些解决方法吗?或者我不应该将正则表达式保存到redux中,即使从技术上将正则表达式保存到JavaScript对象中也是有效的。

编辑:我试图实现不需要使用new RegExp(store.regexes.name) 的情况,我想将实际的正则表达式保存到存储中,因为存储是JavaScript对象。

最佳答案

您可以先通过RegExp的source属性将其转换为字符串

case 'SET_REGEXES':
   const regexsrc = regexes.name.source;
   return {...store, regexes: {name: regexsrc}}
break;

或者,如果regexes实际上是一个数组,则运行转换每个属性的循环。

然后只需执行new RegExp(str)进行检索。

09-19 05:12