正则表达式的平常使用

该文章记录平常工做中用到的正则表达式前端

1.非CSSmodule转成CSSmodule类型

image.png
(className='([^']+?)')正则表达式

  • 查找文件中全部的className部分

image.png
className={styles.$2}小程序

  • 将匹配到的内容换成styles.格式

image.png
(styles.((\w+)-(\w+)))antd

  • 查找到全部的使用-命名的样式

image.png
~~~~styles.$3$4ide

  • 替换全部的使用-命名的样式

image.png

2.将全部使用的moment方法统一管理作判空

场景:项目需求有大量使用antd的DatePiker的使用,当后台传参为空的时候显示invaliddate就很丑
因此通常须要对参数进行判空,数量多起来就要进行抽成统一方法,一个个改的话就很累
统一放在经常使用方法文件中
image.png函数

moment\((.*)\).format\((.*)\)
image.png学习

momentNotNull($1,$2)
image.png
替换以后须要作校验,防止有些已经作了null判空的参数被也被修改了
以上~this

3.清除代码中的debugger

刚学习前端的时候喜欢打debugger
而后以后以为在for循环里打debugger又很是的痛苦
再而后就是用谷歌控制台打断点调试
奈何有时候项目文件过多,搜一个名字又N多重名文件,还要对这列表来找~(心塞)
因此定位小问题的时候仍是喜欢用debugger
定位的问题多了一天下来,文件准备提交了
发现debugger没删
之前的项目组debugger一个没删扣五块钱~
话很少说
上正则阿里云

\sdebugger\n
经过正则表达式一键匹配全部的debugger
而后用空字符替换
(直接搜索debugger进行全局替换会出现把名字包含debugger的函数或者语句给替换掉)spa

4.根据不一样的文件后缀显示不一样的图标

最近boss要求作一个相似于网盘的需求,用的是阿里云的前端直传oss
而后根据保存的文件进行分类显示
涉及到不一样的文件须要有不一样的图标显示

const musicsuf = /\S*\.[mp3|wma|avi|rm|rmvb|flv|mpg|mov|mkv]/
        const videosuf = /\S*\.[mp4|rmvb|flv|mpeg|avi]/
        const imgsuf = /\S*\.[gif|jpeg|png|jpg|bmp]/
        if (videosuf.test(filename)) {
            return (<i className="iconfont icon-videoicon"></i>)
        } else if (musicsuf.test(filename)) {
            return (<i className="iconfont icon-musicicon"></i>)
        }
        else if (imgsuf.test(filename)) {
            return (<i className="iconfont icon-imgicon"></i>)
        } else {
            return (<i className="iconfont icon-excelicon"></i>)
        }

代码分别匹配了常见的视频,音频和图片格式,剩余的默认为文档格式
效果以下
image.png

5.传入时间格式,格式化当前时间

在学习小程序代码的时候偶然看到老师分享的一段时间处理的代码,正好最近有用到moment插件中的format方法,应该moment中的实现方案和这个原理差很少吧,作下记录,代码出处由于太多地方转载,找不到,侵删(狗头)

Date.prototype.Format = function (fmt) { 
    if(!fmt){
        fmt="yyyy-MM-dd hh:mm:ss"
    }
    var o = {
        "M+": this.getMonth() + 1, //月份 
        "d+": this.getDate(), //日 
        "h+": this.getHours(), //小时 
        "m+": this.getMinutes(), //分 
        "s+": this.getSeconds(), //秒 
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
        "S": this.getMilliseconds() //毫秒 
    };
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    }
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        }
    return fmt;
}

var time1 = new Date().Format("yyyy-MM-dd");
var time2 = new Date().Format("yyyy-MM-dd hh:mm:ss");
console.log(time1)
console.log(time2)

to be continue...