本期内容是对JavaScript中正则表达式的简单总结;
正则表达式的test方法:
let str="name zhao"; let reg=/zhao/;里面就是正则表达式了; let res=reg.test(str); console.log(res); //在字符串中匹配到zhao返回true;没有则返回false;
多种模式匹配:
let str_1="name zhao"; let str_2="name qian"; let reg=/zhao|qian/;//|相当于或 let res_1=reg.test(str_1); let res_2=reg.test(str_2); console.log(res_1,res_2);
通过添加标志忽略大小写:
let str_1="name zhao"; let str_2="name ZhAo"; let reg=/zhao/i;//后面的i就是标志位;表示匹配时忽略大小写; let res_1=reg.test(str_1); let res_2=reg.test(str_2); console.log(res_1,res_2);
提取匹配项 match方法:
let str="zhao qian sun li"; let reg=/i/; let res=str.match(reg);//注意这里是str的match方法 //match方法返回一个数组,数组中保存了匹配信息,但只有第一个匹配到的信息; console.log(res);
通过添加标志使全局匹配:
let str="zhao qian sun li"; let reg=/i/g;//g为全局匹配的标志位 let res=str.match(reg);//返回一个数组,数组内有全部匹配到的内容; console.log(res);
通配符的使用:
let str="zhao qian sun li"; let reg=/.i/g;//.为通配符,表示任何一个值; let res=str.match(reg); console.log(res);
字符集的简单使用:
let str="zhao qian sun li"; let reg=/[sql]i/g;//[]表示一个字符集,表示i前面可以是q或者l或者s,仅表示一个字符; let res=str.match(reg); console.log(res);
字符集的其他用法:
let str="@qq zhao 123"; let reg_1=/[0-9]/g;//匹配0-9的数字,相当于[0123456789]; let reg_2=/[a-z]/g;//匹配a-z的字符; let reg_3=/[a-z0-9]/g;//匹配a-z的字符和0-9的数字; let reg_4=/[^0-9a-z]/g;//加了^相当于不匹配,匹配除0-9a-z的所有字符; let res_1=str.match(reg_1); let res_2=str.match(reg_2); let res_3=str.match(reg_3); let res_4=str.match(reg_4); console.log(res_1); console.log(res_2); console.log(res_3); console.log(res_4);
匹配多次出现的字符:
let str_1="naaaaaaame"; let str_2="nme"; let reg_1=/na+/g;//匹配n后面有一到多个a; let reg_2=/na*/g;//匹配n后面有零到多个a; console.log(str_1.match(reg_1)); console.log(str_1.match(reg_2)); console.log(str_2.match(reg_1)); console.log(str_2.match(reg_2));
贪婪模式与非贪婪模式:
let str="naaaaaaame"; let reg_1=/na*/g;//贪婪模式尽可能的去多匹配 let reg_2=/na*?/g;//在*后面加?;非贪婪模式,尽可能少的匹配; console.log(str.match(reg_1)); console.log(str.match(reg_2));
匹配字符串的开头和结尾:
let str_1="name zhao"; let str_2="zhao name" let reg_1=/^name/g;//在前面加^匹配在开头的name let reg_2=/zhao$/g;//在结尾加$匹配在结尾的zhao console.log(str_1.match(reg_1)); console.log(str_1.match(reg_2)); console.log(str_2.match(reg_1)); console.log(str_2.match(reg_2));
字母数字字符集:
let str="namezhao123@163.com"; let reg_1=/\w+/g;//匹配所有字母数字和_;相当于[0-9a-zA-Z_]; let reg_2=/\W+/g;//匹配所有字符;相当于[^0-9a-zA-Z_]; let reg_3=/\d+/g;//匹配所有数字;相当于[0-9]; let reg_4=/\D+/g;//匹配所有的非数字;相当于[^0-9]; console.log(str.match(reg_1)); console.log(str.match(reg_2)); console.log(str.match(reg_3)); console.log(str.match(reg_4));
匹配空格和非空格:
let str="aaa aaa aaa"; let reg_1=/\s/g;//匹配所有空格 let reg_2=/\S/g;//匹配所有非空格 console.log(str.match(reg_1)); console.log(str.match(reg_2));
数量说明符:
let str_1="naaame"; let str_2="naaaaaaame"; let reg_1=/na{2,4}/g;//表示最少匹配两个a,最多匹配4个a; let reg_2=/na{2,}/g;//表示最少匹配两个a,最多不限; let reg_3=/na{3}/g;//表示只匹配三个a; console.log(str_1.match(reg_1)); console.log(str_1.match(reg_2)); console.log(str_1.match(reg_3)); console.log(str_2.match(reg_1)); console.log(str_2.match(reg_2)); console.log(str_2.match(reg_3)); console.log(reg_1.test(str_2));//值得注意的是这里返回true;str_2中存在naaaa,所以返回ture;
有或者没有:
let str_1="name"; let str_2="nme"; let reg=/na?me/g;//a后面加?表示a可有可无,都能匹配; console.log(str_1.match(reg)); console.log(str_2.match(reg));
正向先行断言,负向先行断言:
let str="name niu"; let reg_1=/n(?=a)/;//正向先行断言;匹配后面是a的n; let reg_2=/n(?!a)/;//负向先行断言;匹配后面不是a的n; console.log(str.match(reg_1)); console.log(str.match(reg_2)); //可以看出这两个n并不是一个n;
混合字符组:
let str_1="name"; let str_2="nane"; let reg=/na(me|ne)/g;//括号里表示na后面可以是me或者ne; console.log(str_1.match(reg)); console.log(str_2.match(reg));
捕获组:
let str="name name name"; let reg=/(name)(\s)\1\2\1/g;//\1表示第一个括号\2表示第二个括号 console.log(str.match(reg));
replace方法:
let str_1="The sky is red"; let reg_1=/red/g; console.log(str_1.replace(reg_1,"blue")); //这个方法返回一个替换过的字符串,源字符串并不改变; let str_2="sky blue"; console.log(str_2.replace(/(\w+)\s(\w+)/g,'$2 $1'));