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

将正则表达式转换为掩码输入-Javascript,javascript,regex,parsing,Javascript,Regex,Parsing,我试图将正则表达式格式转换为掩码输入字符串,以指导用户在UI上输入正确的输入。数字用“#”表示,字母用“A”表示 基本上 "^\d{3}$" --> "###" "^(GB)\d{3}$" --> "GB###" "^\d{2}\.\d{3}\/\d{4}-\d{2}$" --> "##.###/####-##" "^\d{

我试图将正则表达式格式转换为掩码输入字符串,以指导用户在UI上输入正确的输入。数字用“#”表示,字母用“A”表示

基本上

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

}

我是Javascript的初学者,我很难动态地做到这一点。任何帮助或指导都将不胜感激


提前谢谢

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

但是,为了完整起见,下面是一个可以处理您作为示例给出的案例子集的实现:

函数convertToMaskInput(regex){
返回新的RegExp(regex).source
.替换(/^\^\$$/g,”)
.替换(/\\d/g,#'))
.replace(/\([^]*)\)\[([^^])\]\\\([\\/.(){}[\]])/g,“$1$2$3”)
.replace(/([\w#.-])\{(\d+)\}/gi,函数(\uu,c,n){
返回数组(+n+1).连接(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))
这是一项艰巨的任务,特别是对于乞丐来说。你最好使用一个类库之类的东西。没有一个实用的编码解决方案能涵盖所有正则表达式。如果你有一小套相同的,你可以手动完成。否则你就得做很多假设。许多正则表达式匹配无限多的可能性,这使得这个问题本质上难以解决。如果您有一个正在测试(转换?)的已知输入格式,那么这样做没有问题<代码>/^码码>/^^\3}{{3}{3}码码>>/^^^^^^码码>/^^码>/^^码码>/^^^码码码码>/^^ 3}{{3}{3}{3}码>///码>//码码码>//^^^^^^^{3{{3}{3}{3}{3}{3}{3}3}}}}码码码码>/////^^^^^^^^^^^^^^^^ 3}{3}{3}3}{3}}{3}{3}{3}}}3}3}}3}}}}3}3}}}3}}}}}}}};;;;码码码码码码>/////>/^\d{2}[]\d{3}[]\d{3}$/-->“######”我猜他想从给定的正则表达式生成格式,就像一些组件能够做到的那样。谢谢你的回复。请您解释一下第三和第四个替换语句是什么?第三个替换语句用它们的内容替换匹配的组
(…)
,并删除单个字符集周围的括号,以及删除诸如
\\(
\\[
在正则表达式中。第四个replace语句用于重复后跟匹配范围的字符(
{4}
变为
###
)。
convertToMaskInput("^\d{4}$");
//Output: "####"