javascript - 从字符串解析RegEx数组

标签 javascript arrays regex

我有一个使用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/

相关文章:

javascript - react child 阻止调用父方法

javascript - 通过 JS 调用时,CSS3 动画在 Chrome 中不起作用

javascript - :contains issue on IE8

java - 如何在Java中制作数组数组

regex - Sed:仅当标记与第一个字符串匹配时才转换为 xml 标记

javascript - 浏览器的 "Previous"按钮位置改变了吗?

sql - 单个查询中的多个 array_agg() 调用

java - 如何将正则表达式从php翻译成java

javascript - 语法错误: Unterminated parenthetical,如何处理 "( )"

java - 堆数组 - 删除根