我正在尝试将正则表达式格式转换为蒙版输入字符串,以引导用户在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的初学者,我很难动态地执行此操作。任何帮助或指导表示赞赏。
提前致谢!
答案 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))