【发布时间】:2020-01-21 14:38:26
【问题描述】:
我有一个使用 masked-input 反应的组件。该组件使用 RegEx 数组来工作:
import React from 'react'
import MaskedInput from 'react-text-mask'
export default () => (
<div>
<MaskedInput
mask={['(', /[1-9]/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
/>
</div>
)
我从远程 API 获取掩码值,掩码以字符串形式出现:
var mask = '[/d/, /d/, " / ", /d/, /d/, " / ", /d/, /d/, /d/, /d/]'
如何将此字符串转换为有效的正则表达式和字符串数组?
来自
var mask = '[/d/, /d/, " / ", /d/, /d/, " / ", /d/, /d/, /d/, /d/]'
到
var mask = [/d/, /d/, " / ", /d/, /d/, " / ", /d/, /d/, /d/, /d/]
【问题讨论】:
-
你有远程服务器的控制权吗?一种更简单的方法是修改服务器以返回所有字符串,然后 JSON.parse 结果。
-
@Marie JSON 不知道什么是正则表达式,因此解析它不会产生正则表达式对象。
-
@VLAZ 这就是为什么我说如果服务器有控制权就让服务器返回所有字符串。然后您可以
JSON.parse(mask).map(s => new RegExp(s))并继续前进,无需破解/手动解析。 -
@Marie 但
" / "->" / ",而不是/ \/ / -
这两个是一回事。
/ \/ /.test(" / ") === new RegExp(" / ").test(" / ") // true。无论哪种方式,OP是否控制服务器都没有关系,他们可以调整工作。这就是我问这个的原因。
标签: javascript arrays regex