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");