一、创建正则
1、方法创建正则
// let reg=new RegExp("a","ig")//检查字符串中是否包含a
// let str="a"
// console.log(reg.test("As"))
i是忽略大小写
g是全局匹配,不会只返回一个
2、字面量创建正则
// let reg=/a|c/i //a或者c
// console.log(typeof reg,reg.test("ab1"))
二、[],(),{}的区别
[]表示或
[]里面的^表示除了,
要和外面的^区分
// let reg=/[ab]/i
// console.log(typeof reg,reg.test("b2we1"))
//[abc]===a|b|c
// let reg=/[a-z]/i
// console.log(typeof reg,reg.test("b2we1"))
// let reg=/a[bde]c/i
// console.log(typeof reg,reg.test("a1c"))
// let reg=/[^ab]/i
// console.log(typeof reg,reg.test("ab1"))
[]表示或的关系,()表示与的关系,{}表示数量{1,3}表示1-3个{1,}1此以上,+表示1-无穷大,*表示0-无穷大,?表示0-1,
// let reg=/(ab){1,3}/i
// let str="ababab"
// console.log(reg.test(str))
三、^和$、*,+,?以及一些通配符
*表示0-无穷大, ?表示0-1
+表示1–无穷大.
//^a表示a开头的,a$表示以a结尾,注意^a$==='a',只能有一个字符 ^a|a$
// let reg=/^a|a$/i
// let str="aa"
// console.log(reg.test(str))
//.代表任意字符,除了换行和$,\转意字符,\表示,\在字符串里也是转意字符在字符串里\才是表达一个
/*
\w 任意字母和数字,下划线
\W 除了字母数字和下划线
\d [0-9]
\D [^0-9]
\s 空格
\S 除了空格
\b 单词边界
\B 除了单词边界
*/
四、String上面有关正则的方法
1、splite
// let str="2e1w1w1w1w1"
// var list=str.split(/[A-z]/)
// console.log(list)
2、search
/ let str="hello abc"
// let result1=str.search(/a[dbe]c/i);
// console.log(result1)
//返回的是索引
3、match
match
搭配全局可以返回所有符合正则的子串。
// let str="1d2edWDDDE332ed"
// let result1=str.match(/[A-z]/gi);
// console.log(result1)
4、replace
前面的是被替换的值,可以是正则,
可以用全局,后面是替换的值.
// let str="1d2edWDDDE332ed"
// let result1=str.replace(/d/g,"@");
// console.log(result1)
5、matchAll(新方法)
以前的写法
let str=`
<ul>
<li>
<a>肖申克的救赎</a>
<p>上映时间:1994-9</p>
</li>
<li>
<a>阿甘正传</a>
<p>上映时间:1994-7</p>
</li>
</ul>
`
const reg=/<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>\s/gs
let result;
let data=[];
while(result=reg.exec(str)){
data.push({title:result[1],time:result[2]});
}
console.log(data)
现在的写法
let str=`
<ul>
<li>
<a>肖申克的救赎</a>
<p>上映时间:1994-9</p>
</li>
<li>
<a>阿甘正传</a>
<p>上映时间:1994-7</p>
</li>
</ul>
`
const reg=/<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>\s/gs
let result;
let data=[];
result=str.matchAll(reg)//得到一个可迭代的对象
for(let t of result){
data.push({name:t[1],time:t[2]})
}
console.log(data)
五、电话和邮箱的正则例子
1、手机号码的正则
号码我乱设置的
//手机号检查
//1373164731
//1 1
//2 [3-9]
//3-11 [0-9]
// let reg1=/^1[3-9][0-9]{9}$/
// let phonestr=1373164731
// console.log(reg1.test(phonestr))
2、邮箱的正则
//电子邮件 /\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}/
// let reg=/^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/g
// let email="163@qq.com"
// console.log(reg.test(email))
六、es9的新方法
1、命名捕获分组
// let str2="<a href='https://ww.baidu.com'>测试</a>"
// const reg=/<a href='(?<url>.*)'>(?<text>.*)<\/a>/
// console.log(reg.test(str2))
// console.log(reg.exec(str2))
2、反向断言,正向断言
/前断言
// let str="231312sddee23112啦啦211"
// let reg=/\d+(?=啦)/
// // console.log(reg.exec(str))
// //不要忘记数量描述 后断言
// let reg2=/(?<=啦)\d+/
// console.log(reg2.exec(str))
反向断言:
正向断言:
3、dotAll模式
就是模式添加了dotAll,//s,在正则后面加s,建议在后面加?避免贪婪模式的影响
let str=`
<ul>
<li>
<a>肖申克的救赎</a>
<p>上映时间:1994-9</p>
</li>
<li>
<a>阿甘正传</a>
<p>上映时间:1994-7</p>
</li>
</ul>
`
const reg=/<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>\s/gs //必须打开全局模式,和关闭贪婪模式
let result;
let data=[];
result=str.matchAll(reg)//得到一个可迭代的对象
for(let t of result){
data.push({name:t[1],time:t[2]})
}
console.log(data)
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/b5c1d189c81e4e66be694fd8a45c09c6.png)