1.正则表达式的含义和作用
正则表达式是用于匹配规律规则的表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。
作用:
- 给定的字符串是否符合正则表达式的过滤逻辑(匹配)。
- 可以通过正则表达式,从字符串中获取我们想要的特定部分(提取)。
- 强大的字符串替换能力(替换)。
2.正则表达式的组成
普通字符 + 特殊字符(元字符),比如:abc123\d\w,abc123是普通字符 \d\w是元字符。
3.常用的元字符
\d 匹配数字 \D 匹配任意非数字的字符
\w 匹配数字,字母或者下划线 \W 匹配不是数字,字母或者下划线
\s 匹配任意位置的空白字符 \S 匹配任意不是空白的字符
. 匹配除了换行符以外的任意单个字符
^ 匹配行首的文本(以谁开始) $ 匹配行尾的文本(以谁结束)
4.限定符
* 限定 *之前的一个字符 重复出现零次或者多次
+ 限定+之前的一个字符 重复出现一次或者多次
? 限定?之前的一个字符 重复出现零次或者一次
{n} 重复n次 {n,} 重复n次或者更多次 {n,m} 重复n到m次数
[] 匹配[]中的任意字符 比如[a-z] [0-9] 相当于或者的意思,是一个范围
[^] 匹配除了中括号以内的内容
{次数}是匹配内容出现的次数,[]表示匹配字符的内容范围,内容出现字数一次
\ 转义符
| 或者 选择两者中的一个,注意:选择的是|左右两部分内容 如果需要单个字符使用()
[\u4e00-\u9fa5] 匹配汉字
5.创建正则对象
方式一:new RegExp() 第一个参数pattern:匹配方式,第二个参数,i:忽略大小写 g:全局匹配 ,这都是字符串类型,gi:全局匹配+忽略大小写。
如果在正则表达式后面没有加上g,那么只会提取到一个匹配的结果,如果加上g就会全文查找所有可能的结果。
var str = 'abcdddd';
var reg = new RegExp('ab[a-z]','i');
方式二:/pattern/i或者g或gi
var reg2 = /^\d{4}\w+\w$/i;
匹配使用的方法:正则对象.test(匹配内容)。
6.正则提取
第一种方法:使用正则对象.exec(),只能提取一个内容(最先出现,返回的也是数组。
第二种方法:字符串.match(正则表达式),可以提取所有内容,返回的是数组
第三种方法:分组提取,在正则表达式中使用()作为分组来使用,判断字符串是否匹配,然后获取分组匹配的结果使用RegExp.$1,$2,$3……来获取。
var str = '张三:8000,李四:9800';
var reg = /\d+/g; //全局匹配 出现数字一次或者或者多次
console.log(reg.exec(str)); //返回的是Array数组对象
console.log(str.match(reg));
var dateStr = '1999-4-2';
var reg = /(\d{4})-(\d{1})-(\d{1})/; //分组提取 按照() 一次提取内容
if(reg.test(dateStr)) {
console.log(RegExp.$1);
console.log(RegExp.$2);
console.log(RegExp.$3);
}
7.正则替换
replace() 两个参数,第一个是字符串中需要替换的内容,第二个是替换的内容。
使用正则表达式(加上全局配置g)就可以将字符串中的所有匹配的内容替换掉
split():切割,返回的数组,使用切割加上join()方法,最后方法的是替换的字符串。
//除去字符串中的空格
var str = ' H e Hello World ';
//使用replace()只会替换第一次出现的空格
// var newStr = str.replace(' ',''); 只能替换第一个
// console.log(newStr);
//replace()加上正则表达式可以查找整个字符串
var newStr = str.replace(/\s/g,'');
console.log(newStr);
//split()分割字符串,返回数组对象,数组元素默认使用逗号隔开
//join()方法,指定分隔符进行分割,返回字符串对象
console.log(str.split(' ').join(''));
8.贪婪模式和非贪婪模式
贪婪模式:一直查找到最后一个符合条件的字符。
非贪婪模式:匹配到第一个符合条件的字符就停止,在需要结束的字符前面加上?就是非贪婪模式。