Javascript 将数字数组转换为合适的正则表达式

Javascript 将数字数组转换为合适的正则表达式,javascript,arrays,regex,Javascript,Arrays,Regex,对。与大多数问题不同的是,我自己并没有试图编写正则表达式。我试图生成一个正则表达式(JavaScript风格,用于HTML5) 给定一个数字数组,给出一个简洁、快速且正确的正则表达式,该正则表达式只匹配给定的输入。我已经完成了部分工作,即[0-9]: var one=[0,1,2,3,4,5,8,9], onesRegex=“”; 对于(变量i=0;i0&&e==one[i-1]+1){ 如果(i!=个[i+1]-1){ onesRegex+=e+“]”; } }否则{ 如果(onesRege

对。与大多数问题不同的是,我自己并没有试图编写正则表达式。我试图生成一个正则表达式(JavaScript风格,用于
HTML5

给定一个数字数组,给出一个简洁、快速且正确的正则表达式,该正则表达式只匹配给定的输入。我已经完成了部分工作,即[0-9]:

var one=[0,1,2,3,4,5,8,9],
onesRegex=“”;
对于(变量i=0;i0&&e==one[i-1]+1){
如果(i!=个[i+1]-1){
onesRegex+=e+“]”;
}
}否则{
如果(onesRegex!=“”)onesRegex+=“|”;
onesRegex+=“[”+e+“-”;
}
}
//返回[0-5]|[8-9]
警报(onesRegex);

带有树的提案

基本上它有两个部分

  • 用一个对象构建树,其中字符串的长度是第一个键,其余的是一个数字和一个对象的属性

  • 通过迭代第一个键(长度)构建正则表达式字符串,并使用属性的内容和以下对象的递减长度/深度开始
    iter

  • 函数getRegex(数组){ 函数组(数组){//获取数组[0,1,3,4,5,6,8]返回字符串'013-68' 返回数组.reduce(函数(r,a,i,aa){ 如果(!i | | aa[i-1]+1!==a){ 返回r.concat([[a]]); } r[r.length-1][1]=a; 返回r; },[])。映射(函数(a){ 返回a.join(a[0]+1==a[1]?'':'-'); }).加入(“”); } 函数iter(o,l){//迭代对象 //以排序的数字形式获取对象中的所有关键帧 var keys=Object.keys(o).map(Number).sort(函数(a,b){返回a-b;}); if(keys.length==1){//如果只有一个键返回该键并获得下一个级别 返回键[0]+iter(o[键[0]],l-1); } 如果(keys.length>1){//如果有多个键 //测试水平 //如果是下一级 //返回括号,其中所有键及其下一级用| //如果没有级别 //返回带括号的分组键 返回l? “('+keys.map(函数(k){return k+iter(o[k],l-1);}).连接('+keys.map)+'): “['+组(键)+']”; } 返回“”; } var-tree={}; array.forEach(函数(a){ 变量o,s=a.toString(); 树[s.length]=树[s.length]|{}; o=树[s.长度]; s、 拆分('').forEach(功能(b){ o[b]=o[b]|{}; o=o[b]; }); }); 返回'('+Object.keys(tree.map)(函数(k){returniter(tree[k],+k-1);}).join('|')+'); } 编写(“”+getRegex([0,1,2,3,4,5,8,9])+“”); 编写(“”+getRegex([10020021213214357])+“”); 编写(“”+getRegex([112358359360361])+“”);
    文档。写(“”+getRegex([0,1,2,3,4,5,8,9,10,11,12,13,14,15,18,19,20,21,105,106,107,256,257,258,259,260])+”;带树的提案

    基本上它有两个部分

  • 用一个对象构建树,其中字符串的长度是第一个键,其余的是一个数字和一个对象的属性

  • 通过迭代第一个键(长度)构建正则表达式字符串,并使用属性的内容和以下对象的递减长度/深度开始
    iter

  • 函数getRegex(数组){ 函数组(数组){//获取数组[0,1,3,4,5,6,8]返回字符串'013-68' 返回数组.reduce(函数(r,a,i,aa){ 如果(!i | | aa[i-1]+1!==a){ 返回r.concat([[a]]); } r[r.length-1][1]=a; 返回r; },[])。映射(函数(a){ 返回a.join(a[0]+1==a[1]?'':'-'); }).加入(“”); } 函数iter(o,l){//迭代对象 //以排序的数字形式获取对象中的所有关键帧 var keys=Object.keys(o).map(Number).sort(函数(a,b){返回a-b;}); if(keys.length==1){//如果只有一个键返回该键并获得下一个级别 返回键[0]+iter(o[键[0]],l-1); } 如果(keys.length>1){//如果有多个键 //测试水平 //如果是下一级 //返回括号,其中所有键及其下一级用| //如果没有级别 //返回带括号的分组键 返回l? “('+keys.map(函数(k){return k+iter(o[k],l-1);}).连接('+keys.map)+'): “['+组(键)+']”; } 返回“”; } var-tree={}; array.forEach(函数(a){ 变量o,s=a.toString(); 树[s.length]=树[s.length]|{}; o=树[s.长度]; s、 拆分('').forEach(功能(b){ o[b]=o[b]|{}; o=o[b]; }); }); 返回'('+Object.keys(tree.map)(函数(k){returniter(tree[k],+k-1);}).join('|')+'); } 编写(“”+getRegex([0,1,2,3,4,5,8,9])+“”); 编写(“”+getRegex([10020021213214357])+“”); 编写(“”+getRegex([112358359360361])+“”);
    文档(Ac+GETReX([ 0, 1, 2,3, 4, 5,8, 9, 10,11, 12, 13,14, 15, 18,19, 20, 21,105, 106, 107,256, 257, 258,259, 260)] +'';

    作为一种替代方法,考虑使用HTML5<代码> <代码>。这也可以在JavaScript中生成。


    这里有一个演示给你:

    作为一种替代方法,考虑使用HTML5<代码> /COD>。这也可以在JavaScript中生成。

    这里有一个演示给你:

    As
    var arr = [.......];
    
    var datalist = document.createElement('datalist');
    arr.forEach(function(num) {
        var option = document.createElement('option');
        option.value = num;
        datalist.appendChild(option);
    });
    datalist.id = "numberlist";
    document.body.appendChild(datalist);
    
    // apply to input
    someInputElement.setAttribute("list","numberlist");