正则表达式

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  

你可能感兴趣的:(正则表达式)