关于如何创建携带变量的正则表达式
对于正则表达式,相信大家都不陌生,它对于我们执行一些字符串的操作是非常便捷的。而本人平时使用到的正则都是不携带变量的。例如:/^\w+$/这种简单的正则。然而在最近一次的工作中我碰到了需要检测一段字符串中是否含有指定国家代码的需求(不可以使用indexOf和includes,因为不能保证正常国家名不会包括那两位英文字母,使用正则可以加上前面必须是非英文和数字的要求),然后大脑一阵短路,才发现自己不会创建携带变量的正则表达式...
普通的定义方式不能创建携带变量的正则
通过在网络上查找资料,我发现使用let reg = /^\w+$/;的方式并不能创建携带变量的正则。应该使用下面的方式:
let reg = new RegExp(
"\\W" + String(countryCode).toLowerCase() + "\\W?"
);
关于截取文件名后面的后缀
另一个需求是需要截取掉文件名中携带的后缀,只保留前面部分。一开始的想法是先用.来对文件名进行split分割成数组,再使用pop来删除最后一项,最后使用join来拼接成字符串。这种方式从性能优化上来讲是不太好的方法,所以我想到了使用replace来做,问题在于replace不能保证替换的位置是那一部分,比如一个字符串为1.doc.xlsx.xlsx,想要截取掉最有一个.xlsx时,光使用replace('.xlsx','')是行不通的。我的解决方法如下:
var mime = require("mime-types");// 这是一个文件插件,可以将file类型的type转换成我们熟悉的文件后缀;
let fileType = '.'+mime.extension(file.type);
let regStr = fileType + '$';
let reg = new RegExp(regStr); // reg 为/.xlsx$/,这样就可以做到只替换以.xlsx结尾的字符串了
let fileName = file.name.replace(reg,'');
最后,希望自己能够越来越强(不要秃头..)