最新项目中遇到这样一个小功能,将字符串中指定的字符全部替换成另外一个字符,本来很简单的一个小问题,测试也好好的,交付之后,差点把我搞失业!说起来,都怪这个“RegExp”方法。

在使用RegExp实例的时候,没有分清字面量和字符串参数导致字符全部被过滤,最后结果返回的是空字符串。

js正则如何过滤掉全部指定符合|字符串?RegExp这个坑,差点把工作给我搞丢!-QUI-Notes

场景还原

// 正常测试
let Str = "hello world!"
//将字符串中所有得a换成b,b替换掉a
function reg(str,a,b){
let r = new RegExp(a,"g");
return str.replace(r,b);
} 
let test = reg(Str,"o","i");
console.log(test);//“helli wirld!”

这时候,用来替换字符串非常丝滑,没有丝毫问题,但是在实际项目中我这样用了:

let time = "1999.12.31";
let res = reg(time,".","");

出现问题:返回了空字符串。

解决办法

RegExp 对象用于将文本与一个模式匹配。有两种方法可以创建一个 RegExp 对象:一种是字面量,另一种是构造函数。

js正则如何过滤掉全部指定符合|字符串?RegExp这个坑,差点把工作给我搞丢!-QUI-Notes

也就是说,我将“.” 作为字符串参数传进去了,然后给抛出了空。这是问题的结果,修复这个问题很简单,将"."改成字面量就行了:/\./  就可以了。

let res = reg(time,/\./,"");//19991231

但是,疑点就在"."传进去,匹配不到也不应该返回空字符串。懵逼了,留给未来一个问题,或许未来的我能找到这个答案,真是一个神奇的方法。