正则是正经的正则,你会不会封装我就不清楚了。

230 阅读2分钟

用正则的方法判断数据类型

Object.prototype.getType=function(){
    let str=Object.toString.call(this);//'object XXX'
    reg=/ (\w+)/ //用空格匹配需要提取的内容
   return reg.exec(str)[1].toLowerCase()//返回得到内容的第二项,然后转换成小写
}

创建一个execAll的方法,一次性捕获到所有自己想要的内容

RegExp.prototype.execAll=function(){
  let _this=this    // 因为this不能直接赋值,所以创建一个新变量进行赋值
    if(!this.glounb){ //exec的方法,如果没有全局'g'则只会默认捕获第一个符合条件的那一项,不会再往下捕获了
        _this=eval(_this+'g')
    }
    let ary=[]
    let res=_this.exec(str)
    while(res){    //while循环会在res值为null时停止循环
        ary.push(res);
        res=_this.exec(str)
    }
    return ary
}

创建一个分割url的getParm方法

function getParm(key){
    let obj={}
    let reg = /([^?=&]+)=([^?=&]+)/;
    str.replace(reg,function(a,b,c){
        obj[b]=c//  捕获中a是整个大正则捕获的内容,b是第一个括号捕获的内容,c是第二个括号捕获的内容
    })
    return obj[key] ? obj[key] : obj  //判断key存不存在,如果存在返回obj的key属性哪一个属性值,如果没有,正常返回obj整个对象
}

将一个字符串中的大写字母改成小写,小写的字母改成大写的一个方法

let str='sajhKJAFKAkajhhfakjh'
let reg=/([a-z]*)([A-Z]*)/g
str.replace(reg,function(a,b,c){
   return str+=b.touppercase()+c.tolowercase()
})

获取字符串中出现次数最多的字符还有出现次数(高频面试题)

第一种方法

let str='skjakajhfkah'
function getMax(str){
    let obj={}
    for(let i=0;i<str.length;i++){
        let a =str[i];
        if(obj.hasownproperty('a')){ //判断字符串中的一项,有没有出现过,如果出现过,则给这一项的属性值加1
            obj[a]+=1
        }else{//如果之前没有出现过,则让该属性的属性值一直保持是1
            obj[a]=1
        }
    }
    let key='',
       num=0
    for(k in obj){
        if(obj[k]>num){//循环判断哪一个属性名的属性值最大
            k=key;
            obj[k]=num
        }
    }
    return {
        key,//出现最多的字符
        num//出现的次数
    }
}
getMax(str)

第二种方法(使用正则)

let str='skjakajhfkah'
function getMax2(str){
    let key=''
    let num=0
    let str=str.split('').sort().join('') //把相同的字母排到一块
    str.replace(/(\w)\1*/g,function(a,b){//a代表整个大正则,b代表捕获到的哪一个字母
        if(a.length>num){
           num=a.length;
           key=b
        }
    }
    return {
        key;//出现最多的那一个字符
        num//出现的次数
    }
}
getMax2(str)

模版引擎

let template = '我是{{name}},年龄{{age}},性别{{sex}}';
    let data = {
        name: '小明',
        age: 18
    }
  
    
function render(template, data){
   let str = template.replace(/\{\{\(w+)\}\}/),funciton(a,b){
       return data[b]
    }
    return str
}
  render(template, data); // 实现效果:我是小明,年龄18,性别undefined

千分符

var str='1213131214'
  function rem(str){
    return str.replace(/(\d{1,3})(?=(\d{3})+$)/g,'$1,'  )
  }
  rem(str)