我有一个使用react和 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/]'
如何将这个字符串转换为RegEx和字符串的有效数组?
从
var mask = '[/d/, /d/, " / ", /d/, /d/, " / ", /d/, /d/, /d/, /d/]'
至
var mask = [/d/, /d/, " / ", /d/, /d/, " / ", /d/, /d/, /d/, /d/]
最佳答案
您可以尝试为每个项目创建一个循环,然后将它们放入RegExp类:
var mask = '[/d/, /d/, " / ", /d/, /d/, " / ", /d/, /d/, /d/, /d/]';
mask = mask.substring(1, mask.length - 1);
var patterns = [];
for (var pattern of mask.split(',')) {
pattern = pattern.trim().replace(/(^\/)|(\/$)|(^")|("$)/g, '');
patterns.push(new RegExp(`${pattern}`));
}
console.log(patterns);
console.log(patterns[0].test('d'));
如果要保留包含
" / "
作为字符串而不是正则表达式模式的项目。在循环旁,您可以将其编辑为:for (var pattern of mask.split(',')) {
pattern = pattern.trim().replace(/(^\/)|(\/$)/g, '');
patterns.push(/^".+"$/.test(pattern) ? pattern.replace(/"/g, '') : new RegExp(`${pattern}`));
}
关于javascript - 从字符串解析RegEx数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59843455/