class AutoStr {
constructor(str){
var the=this
the.data=[]
the.lendata=[]
the.str=str
str.replace(/[(.-.*?)]/g,function(m,item){
var itemarr=[]
var itemlen=0
item.replace(/(.)-(.)/g,function(m,p1,p2){
itemarr.push(p1.charCodeAt(0))
itemarr.push(p2.charCodeAt(0))
itemlen=itemlen+p2.charCodeAt(0)-p1.charCodeAt(0)+1
})
the.data.push(itemarr)
the.lendata.push(itemlen)
})
//记录长度
var len=1
for(var i=0;i<the.lendata.length;i++){
len=len*the.lendata[i]
}
the.length=len
}
eq(n){
var back=this._sync(n,this.lendata,this.length)
var strArr=this.getStrArr(back)
var num=-1
var str=this.str.replace(/[.-.*?]/g,function(){
num=num+1
return String.fromCharCode(strArr[num])
})
return str
}
//多进制转换 demo:把16转成110
_sync(n,arr,len){
var back=[]
for(var i=0;i<arr.length;i++){
len=len/arr[i]
back.push(parseInt(n/len))
n=n%len
}
return back
}
//获取返回的字符
getStrArr(back){
var arr=[]
for(var i=0;i<this.data.length;i++){
arr.push(this.getM(this.data[i],back[i]))
}
return arr
}
//获取区间范围
getM(arr,n){
for(var i=0;i<arr.length;i=i+2){
var len=arr[i+1]-arr[i]+1
if(n>=len){
n=n-len
}else{
return arr[i]+n
}
}
}
}
var d=new AutoStr("http://www.baidu.com/[1-2A-Z][0-2].html")
console.log(d.length)
for(var i=0;i< d.length;i++){
console.log(d.eq(i))
}
可以生成中文、英文、数字字典,暴力破解密码,暴力爬虫