1 正则表达式
1.1 概念
正则表达式通常被用来检索、替换那些复合某个模式(规则)的文本
正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一些特定字符、以及这个特定字符的组合,组成一个‘规则字符串’,这个‘规则字符串’用来表达对字符串的一种过滤逻辑
1.2 作用
1)匹配
判断给定的字符串是否复合正则表达式的过滤逻辑
2)提取
可以通过正则表达式,从字符串中获取需要的特定部分
3)替换
正则有很强大的字符串替换功能
1.3 特点
1)灵活性、逻辑性和功能性非常强
2)运用广,比如爬虫
1.4 组成
1)普通字符 ‘itlike’、'123'
2)元字符 正则表达式中有特殊意义的字符
1.5 JS中使用正则表达式
1)创建正则对象
代码:RegExp()
RegExp(pattern,attributes);
pattern是一个参数,即是需要的正则表达式
attributes是可选修饰符,有i、g、m三种取值
i 忽略大小写
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
m 执行多行匹配
可以合并书写,即:RegExp(pattern,igm);
示例
var reg = new RegExp('ab[a-z]','i');
var str = 'ABC';
reg.text(str);
console.log(reg.text(str);); //true
//字面量写法
var reg = /ab[a-z]/i;
var str = 'ABC';
reg.text(str);
console.log(reg.text(str);); //true
2)与正则表达式相关的方法
针对RegExp对象
text() 匹配
exec() 提取,提取一个内容
针对String对象
match() 提取,提取多个内容
replace() 替换
split() 切割
search() 搜索
3)匹配
//匹配日期
var dateStr = '2020-01-01';
var dateReg = /^\d{4}-\d{1,2}-\d{1,2}$/;
dateReh.text(dateStr);
console.log(dateReh.text(dateStr)); //true
//匹配手机
var phoneStr = '15800353121';
var phoneReg = /^\d{11}$/;
phoneReg.test(phoneStr);
console.log(phoneReg.test(phoneStr));
4)提取
exec()
提取一个 match()
提取多个
//提取QQ号 exec()
var qqStr = 'Mrx:546782,Lbl:7856546,Dzs:458755555';
var qqReg = /\d+/g;
var content = qqReg.exec(qqStr);
console.log(content); //输出546782的数组
console.log(content[0]); //输出546782
console.log(content[1]); //undefined
//提取QQ号 match()
var qqStr = 'Mrx:546782,Lbl:7856546,Dzs:458755555';
var qqReg = /\d+/g;
var content = qqReg.match(qqStr);
console.log(content); //输出全部数字的数组
分组提取
正则表达式中的()作为分组来使用,获取分组匹配到的结果用Regex.2$3...来获取
var dateStr = '2020-01-01';
var dateReg = /^(\d{4})-(\d{1,2})-(\d{1,2})$/;
if(dateReg.text(dateStr)) {
console.log(RegExp.$1); //2020
console.log(RegExp.$2); //01
console.log(RegExp.$3); //01
}
5)替换 replace()
替换所有空白字符
替换所有开头空格
替换所有结尾空格
var str = ' i love Mrx Y e s ';
//替换所有空白字符
str = str.replace(/\s/g, '*'); //******i*love*Mrx****
//替换所有开头空格
str = str.replace(/^\s*/, '*'); //*i love Mrx
//替换所有结尾空格
str = str replace(/\s*$/, '*'); // i love Mrx*
6)分割 split()切割
var dateStr = '2020-01-01';
dateStr.split('-');
console.log(dateStr.split('-')); //分割为数组了
7)贪婪和非贪婪模式
贪婪:尽可能多的匹配,默认模式
非贪婪:尽可能少的匹配
语法
将?紧跟在任何量词*+?或{}的后面,将会使量词变为非贪婪的
var str = 'aaaaabbbbaaaaa';
var res = str.match(/a.*b/);
console.log(res[0]); //aaaaabbbb
var res = str.match(/a.*?b/);
console.log(res[0]); //aaaaab