用正则的方法判断数据类型
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)