将正则表达式转换为掩码输入 - Javascript

时间:2017-03-27 23:06:34

标签: javascript regex parsing

我正在尝试将正则表达式格式转换为蒙版输入字符串,以引导用户在UI上输入正确的输入。数字将由"#"表示。和#34; A"。

基本上,

      "^\d{3}$"                        -->    "###"
      "^(GB)\d{3}$"                    -->    "GB###"
      "^\d{2}\.\d{3}\/\d{4}-\d{2}$"    -->    "##.###/####-##"
      "^\d{2}[ ]\d{3}[ ]\d{3}$"        -->    "## ### ###" 

function convertToMaskInput(regex){

}

convertToMaskInput("^\d{4}$");
//Output: "####"

我是Javascript的初学者,我很难动态地执行此操作。任何帮助或指导表示赞赏。

提前致谢!

1 个答案:

答案 0 :(得分:1)

如果您的目标是处理正则表达式的每个可能变体,那么您应该使用现有插件而不是滚动自己的解决方案。

但是,为了完整起见,这里有一个实现可以处理您提供的案例子集作为示例:

function convertToMaskInput(regex) {
  return new RegExp(regex).source
    .replace(/^\^|\$$/g, '')
    .replace(/\\d/g, '#')
    .replace(/\(([^)]*)\)|\[([^^])\]|\\([\\/.(){}[\]])/g, '$1$2$3')
    .replace(/([\w#.-])\{(\d+)\}/gi, function (_, c, n) {
        return Array(+n + 1).join(c)
    })
}

convertToMaskInput("^\d{4}$")

console.log([
  /^\d{3}$/, //=> "###"
  /^(GB)\d{3}$/, //=> "GB###"
  /^\d{2}\.\d{3}\/\d{4}-\d{2}$/, //=> "##.###/####-##"
  /^\d{2}[ ]\d{3}[ ]\d{3}$/ //=> "## ### ###" 
].map(convertToMaskInput))