一、为什么需要学习正则表达式
正则表达式是一种应用广,灵活度高的一种查找方式,目前在爬虫爬取,对特定的内容的抓包,登录的验证等多个方面都用得上正则表达式,但是由于其实一种灵活的查找,所以我们要付出的代价就是相应使用的复杂,复杂度表现在语法上的不便记忆和应用层面上的易出错,今天我们就来谈谈正则表达式在应用层面上常出现的错误
二、正则表达式常见坑
1、零宽断言理解错误
零宽断言匹配的相当于是一个位置,不是一个具体的内容
示例:
将字符串str="test.com"的.前面的替换为1,也就是str="1.com"
错误示范:
var str="test.com"; console.log(str); var reg=/(?=\.)*/gi; //var re=new RegExp(reg); str=str.replace(reg,"1"); console.log(str);
运行结果是:str="1t1e1s1t1.1c1o1m",我想此时你的心情一定是这样的
从这个运行结果来看,就是在原来的字符串中的每个字符前面插入1,但是这个并不是我们所要求的,造成这样的原因主要是位置弄错了,现在把代码改为如下所示:
var str="test.com"; console.log(str); var reg=/\w+(?=\.)/gi; //var re=new RegExp(reg); str=str.replace(reg,"1"); console.log(str);
这样运行一下就得到了我们所要求的,这个位置我们其实是要求:匹配类型+元字符+零宽断言,错误示范中是零宽断言+元字符这样的一种组合,根本不符合语法的要求,所以错误
2、后向调用理解错误
示例:
匹配字符串str="455 33"
错误示范
var str="455 33"; var test=/\b([1-4]\d{1,2})\s?\1\b/gi; console.log(test.test(str));
这个错误主要的原因是对后向调用的理解有误,后向调用第n次使用时匹配第一次的完全相同的内容,但是不意味着在这里第二次引用前面分组的正则表达式,所以这里只匹配“455 455”这样的字符串
时间: 2024-10-10 09:57:30