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,")
}