1、操作方法
String str="abcd"
String reg=\/w\
str.match(reg);返回数组
reg.test(str); 返回boolean
reg.exec(str); 返回第一个,继续exec返回下一个
2、字符预定义
\w(数字、字母、下划线) \W(非数字、字母、下划线)
\d(数字) \D(非数字)
\s(空白字符,可能是空格、制表符、其他空白) \S (非空白字符,可能是空格、制表符、其他空白)
. (匹配除了换行,回车,段落结束符,行结束符之外的字符)
3、数量相关 {} ? * + (? 相当于 {0,1}, + 相当于 {1,} ,* 相当于{0,})
4、位置相关 ^(匹配开头) $(匹配结尾) \b(边界 即非\w的都是边界) \B(非边界)
5、括号相关 () [] {}
5.1、 ():表示分组的意思 ,还可以提取值,match返回分组后的数组,还可以替换,还可以反响引用
$1,$2,返回分组后的第一个年,第二个月等,拿到对应的值,$0匹配全局
let str="2020-01-02"
let reg=/(\d{4}-\d{2}-\d{2})/
str.match(reg)
console.log(RegExp.$1) //2020
console.log(RegExp.$2) //01
console.log(RegExp.$3) //02
//替换
let str="2020-01-02" //01/02/2020
let reg=/(\d{4}-\d{2}-\d{2})/
let res=str.replace(reg,"$2/$3/$1")
//或者
res=str.replace(reg,function(arg,year,month,day){
return month+"/"+day+"/"+year
})
console.log(res) //02
//反向引用
let className="news-container-nav";//news_container_nav
let reg=/\w{4}(-|_)\w{9}(-|_)\w{3}/ //常规写法
reg=/\w{4}(-|_)\w{9}(\1)\w{3}/ //反向引用 (\n) (这里是1,意思是和前面(-|_)的一致)
let res=reg.test(className)
console.log(res)
5.2、 []:表示 字符集合;
let str="My name is LiLei";
let reg=/Li(L|l)ei/g
reg=/Li[Ll]ei/g //[Ll]相当于(L|l)
console.log(reg.test(str));
//注意以下必须是连续的ask2码连续,否则不行
reg=/[0-9]/g; //匹配所有0-9之间的数字,给一段范围
reg=/[a-z]/g; //匹配所有a-z之间的数字,给一段范围
reg=/[A-Z]/g; //匹配所有A-Z之间的数字,给一段范围
reg=/[^0-9]/g //^在集合里代表非
\w 相当于[a-zA-Z0-9_]
6、匹配模式 g i m s u y
6.1、g:全局匹配
6.2、 i:忽略大小写
let str="abCABc"
let reg=/abc/gi;
console.log(reg) //true
6.3、m:多行模式
let str="abc
efg
hij"
let reg=/^\w/gm
let res=str.replace(reg,"*") //每一行开头都匹配 *bc *fg *ij
console.log(res)
6.4、s:让"."去匹配换行
let str="abc
efg";
let reg=/^a.*g$/gs;
console.log(reg.test(str)) //true
6.5、u:匹配unicode编码
let str="a"; //61
let reg=/\u{61}/gu
console.log(reg.test(str)) //true
6.6、y:粘性模式
let str="123fdfd45sa4324";
let reg=/\d/g
console.log(reg.exec(str)) //1
console.log(reg.exec(str)) //2
console.log(reg.exec(str)) //3
console.log(reg.exec(str)) //4
console.log(reg.exec(str)) //5
let reg=/\d/gy //不连续的数字在粘性模式下不匹配
console.log(reg.exec(str)) //1
console.log(reg.exec(str)) //2
console.log(reg.exec(str)) //3 已结束
7、命名分组及零宽断言
7.1、命名分组
let str="2020-01-06";
let reg=/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
//match返回的对象中groups里面定义了 自定义名称和对应的值,如下:
// year:2020
//month:01
//day:06
console.log(str.match(reg))
7.2、零宽断言
正向肯定零宽断言
let str="iphone3iphone4iphone5iphonenumber";
//肯定
let reg=/iphone(?=\d)/g;
//否定
let reg=/iphone(?!\d)/g;
let res=str.replace(reg,"苹果")
负向肯定零宽断言
let str="10px20px30pxipx";
//肯定
let reg=/(?<=\d)px/g;
//否定
let reg=/(?<!\d)px/g;
let res=str.replace(reg,"像素")
console.log(res)