一、正则表达式
正则表达式用来定义一个规则
通过这个规则计算机可以检查一个字符串是否符合规则,或者将字符串中符合规则的内容提取出来
正则表达式也是JS中的一个对象,所以要使用正则表达式,需要先创建正则表达式的对象
正则表达式对象的创建:
// 1、new RegExp() 可以接收两个参数(字符串) 1.正则表达式 2.匹配模式
let reg = new RegExp("a", "i") // 通过构造函数来创建一个正则表达式的对象
// 2、使用字面量来创建正则表达式:/正则/匹配模式
reg = /a/i // /a/ 表示,检查一个字符串中是否有a i表示忽略大小写
在RegExp中用转义字符的时候,记得要用两个/,如果只有一个/的话会忽略,不起作用
二、正则表达式的语法
1.字符集
1、| 在正则表达式中表示或
2、[] 表示或(字符集)
- [a-z] 任意的小写字母
- [A-Z] 任意的大写字母
- [a-zA-Z] 任意的字母
- [0-9]任意数字
3、[^] 表示除了
[^a-z] 除了a-z,匹配包含小写字母以外内容的字符串
4、. 表示除了换行外的任意字符
在正则表达式中使用\作为转义字符,如果只想匹配.可以用这个 re = /./
5、其他的字符集
- \w 任意的单词字符 等价于:[A-Za-z0-9_ ]
- \W 除了单词字符 [^A-Za-z0-9_ ]
- \d 任意数字[0-9]
- \D 除了数字 [^0-9]
- \s 空格 包括空格、制表符、换页符、换行符
- \S 除了空格
- \b 单词边界
- \B除了单词边界
6、开头和结尾
^ 表示字符串的开头
$ 表示字符串的结尾
re = /^a$/ //只匹配字母a,完全匹配,要求字符串必须和正则完全一致
re = /^abc$/ //只匹配abc,完全匹配
2.量词
{m} 正好m个
{m,} 至少m个
{m,n} m-n个
+ 一个以上,相当于{1,}
* 任意数量的a
? 0-1次 {0,1}
let re = /a{3}/ //检查字符串中有没有aaa
let result = re.test("aaaa") //true
re = /^a{3}$/ //检查字符串中正好只有aaa
3.语法
re.exec() 获取字符串中符合正则表达式的内容
g表示全局匹配
用()可以分组
let str = "abcaecafcacc"
let re = /a[a-z]c/ig
let result = re.exec(str) //但是要通过不断调用才可以得到所有匹配的
let re = /a(([a-z])c)/ig
let result = re.exec(str) //含有"abc" "bc" "b"
while(result){ //循环遍历
console.log(result[0], result[1], result[2])
result = re.exec(str)
}
4.字符串
split()
可以根据正则表达式来对一个字符串进行拆分
search()
可以去搜索符合正则表达式的内容第一次在字符串中出现的位置
replace()
根据正则表达式替换字符串中的指定内容
match()
根据正则表达式去匹配字符串中符合要求的内容,不可以分组
matchAll()
根据正则表达式去匹配字符串中符合要求的内容**(必须设置g 全局匹配)**
它返回的是一个迭代器,可以分组
let str = "a@b@c@d"
let result = str.split("@")
str = "孙悟空abc猪八戒adc沙和尚"
result = str.split(/a[bd]c/)
result = str.search("abc") //3
str ="dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd"
result = str.replace(/1[3-9]\d{9}/g, "哈哈哈") //全局手机号替换为哈哈哈
result = str.match(/1[3-9]\d{9}/g) //返回的是一个数组["13715678903","13457890657","13811678908"]
result = str.matchAll(/1[3-9](\d{9})/g) //可以分组
for(let item of result){
console.log(item)
}
总结
本节主要是学习js的正则表达式。