String 方法 与 正则 结合

154 阅读1分钟

match 和 exec 的区别

 不加全局修饰符g的时候  两者功能一样的。
//加上g之后match 可以把所有大正则匹配的内容都捕获到  但是  会丢掉 小分组的捕获
    var reg = /([a-z]+)(\d+)/g
    var str = "zf2019zf2020";
    console.log(reg.exec(str));
    console.log(str.match(reg));
  

使用match封装一个getParam()用来获取url属性

function getParam(url){
    let reg=/([^?+=&])=([^?=&#])/g;
    url.match(reg).forEach(item=>{
     let a=item.split("=");
     obj[a[0]]=a[1];
    })
    return obj;
}

使用 replace 编写getParam

function getParam(url){
     let reg = /([^?=&]+) = ([^?=&#]+)/g;
     let obj = {};
     url.replace(reg,($0,$1,$2) => obj[$1] = $2);
    return obj;
}

String split

 var str = 'a-3_34+rgdfv=gegd?terdgdf';
 str.split(/[^a-zA-Z\d]/);

除了空格文本框都不可以输入

    inp.oninput = function () {
        //除了数字 空格其他都不可以输入
        this.value = this.value.replace(/[^\d ]/g, '');
    }

使用replace 转换大小写

vat res=str.replace(/[A-Za-z]/g,function($1){
    if($1.toLowerCase()==$1) return $1.toUpperCase();
    return $1.toLowerCase;
})
 var res= str.replace(/([a-z]*)([A-Z]*)/g,funtion($0,$1,$2){
  return $1.toUpperCase()+$2.toLowerCase();
 
 })
  
  var str2=""
  for(let i=0;i<str.length;i++){
      let a=str[i];
      if(a.toLowerCase()==a){
          str2+=a.toUpperCase();
          }
          else{
              str2+=a.toLowerCase();
          }
      }
  }
  

获取字符中出现最多的字符 第一种

  var str = "PODJQRYQ8YHEQFR8QIHRBQDBAFI[PQP2EH981QHRAF";
  function getMax(str){
      let obj={};
      for(let i = 0;i < str.length ; i++ );
      obj.hasOwnProperty(str[i])? obj[str[i]]++ : obj[str[i]]=1;
  }
  var val=Object.value(obj);
  var key=Object.key(obj);
  var m=Math.max(...val);
  var n=key[val.indexOf(m)];
  return{
      n,m
  }
  }

第二种

var str = "PODJQRYQ8YHEQFR8QIHRBQDBAFI[PQP2EH981QHRAF";
function getMax(str){
    str=str.split('').sort().join('');
    var arr=str.match(/([\w\d])\1*/g);
    arr.sort((a,b)=>b.length - a.length)[0];
    return{
        key:arr[0][0],
        num:arr[0].length
    }
    
}

第三种

var str = "PODJQRYQ8YHEQFR8QIHRBQDBAFI[PQP2EH981QHRAF";
 function getMax(str){
     str=str.split('').sort().join('');
     var key="",num=0;
     var ary=str.replace(/([\w\d])\1*/g,function ($0,$1){
      if($0.length>num){
          num=$0.length;
          key=$1;
      }
     })
     return{
         key,num
     }
 }
 

模板引擎

  let template = '我是{{name}},年龄{{age}},性别{{sex}}';
    let data = {
        name: '车干',
        age: 18
    }
    function render(template,date){
        template=templte.replace(/\{\{(\w+)\}\}/g,function($0,$1){
         return data[$1] ? data[$1]: '未知'
        })
        return template;
    }
    匹配时间
   function timeFormate(templeat,time=null){
       template=template|| '今天是{{0}}年{{1}}月{{2}}日 {{3}}时{{4}}分{{5}}秒';
       time= time ? newDate(time) : new Data;
        let ary = [time.getFullYear(), time.getMonth() + 1, time.getDate(), time.getHours(), time.getMinutes(), time.getSeconds()];
        return template.replace(/\{\{(\w+)\}\}/g,function(a,b){
            return ary[b];
        })
       
   }

 

千分符

 var str ="2121321424";
 function moneyFormate(str){
      let s="";
      s =str.replace(/\d{1,3}(?+(\d{3})+$)/g,function(a){
        return a+',';
      })
      return s
 }

 var str ="2121321424";
 function moneyFormate(str){
     return str.replace(/(\d{1,3})(?=(\d{3})+$)/g,"$1,")
 }