js正则如何过滤掉全部指定符合|字符串?RegExp这个坑,差点把工作给我搞丢!
七娃博客204人阅读
最新项目中遇到这样一个小功能,将字符串中指定的字符全部替换成另外一个字符,本来很简单的一个小问题,测试也好好的,交付之后,差点把我搞失业!说起来,都怪这个“RegExp”方法。
在使用RegExp实例的时候,没有分清字面量和字符串参数导致字符全部被过滤,最后结果返回的是空字符串。
场景还原
// 正常测试 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 对象:一种是字面量,另一种是构造函数。
也就是说,我将“.” 作为字符串参数传进去了,然后给抛出了空。这是问题的结果,修复这个问题很简单,将"."改成字面量就行了:/\./ 就可以了。
let res = reg(time,/\./,"");//19991231
但是,疑点就在"."传进去,匹配不到也不应该返回空字符串。懵逼了,留给未来一个问题,或许未来的我能找到这个答案,真是一个神奇的方法。
评论 | 0 条评论
登录之后才可留言,前往登录