正则表达式
正则表达式用来定义一个规则
通过这个规则计算机可以检查一个字符串是否符合规则或者将字符串中符合规则的内容提取出来
正则表达式也是JS中的一个对象所以要使用正则表达式 需要先创建正则表达式的对象
new RegExp()
可以接收两个参数(字符串)
参数一:正则表达式
参数二:匹配模式
let reg = new RegExp('a', 'i')
使用字面量来创建正则表达式
/正则/匹配模式
reg = /a/i
注意:需要有两个/包裹
匹配模式
i 表示忽略大小写
g 表示全局匹配
匹配规则
1.在正则表达式中大部分字符都可以直接写
2.|
在正则表达式中表示或
3.[]
表示或(字符集)
[a-z]
任意的小写字母[A-Z]
任意的大写字母[a-zA-Z]
任意的字母[0-9]
任意数字
4.[^]
表示除了
[^x]
除了x
5..
表示除了换行外的任意字符
6.在正则表达式中使用 \
作为转义字符
7.其他的字符集
\w
(小写w)任意的单词字符[A-Za-z0-9_]
\W
(大写W)除了单词字符[^A-Za-z0-9_]
\d
(小写d)任意数字[0-9]
\D
(大写D)除了数字[^0-9]
\s
(大写s)空格\S
(大写S)除了空格\b
单词边界\B
除了单词边界
8.开头和结尾
^
表示字符串的开头$
表示字符串的结尾
量词
{m}
正好m个{m,}
至少m个{m,n}
m-n个+
一个以上 相当于{1,}
*
任意数量的a?
0-1次{0,1}
re.exec()
//获取字符串中符合正则表达式的内容
let str = 'abcaecafcacc'
let re = /a(([a-z])c)/ig
let result = re.exec(str)
while (result) {
console.log(result[0], result[1], result[2])
result = re.exec(str)
// abc bc b aec ec e afc fc f acc cc c
}
练习:
let re = /(1[3-9]\d)\d{4}(\d{4})/g
let str = "dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd"
let result
while (result = re.exec(str)) {
console.log(result[1] + "****" + result[2])
// 137****8903 134****0657 138****8908
}
split()
- 可以根据正则表达式来对一个字符串进行拆分
let str = "a@b@c@d";
let result = str.split("@");
console.log(result); // ['a', 'b', 'c', 'd']
str = "孙悟空abc猪八戒adc沙和尚";
result = str.split(/a[bd]c/);
console.log(result); // ['孙悟空', '猪八戒', '沙和尚']
search()
- 可以去搜索符合正则表达式的内容第一次在字符串中出现的位置
let str = "dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd";
let result = str.search("abc");
console.log(result); // -1
result = str.search(/1[3-9]\d{9}/);
console.log(result); // 6
replace()
- 根据正则表达式替换字符串中的指定内容
let str = "dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd";
let result = str.replace(/1[3-9]\d{9}/g, "哈哈哈");
console.log(result); // dajsdh哈哈哈jasdlakdkjg哈哈哈djashdjka哈哈哈sdadadasd
match()
- 根据正则表达式去匹配字符串中符合要求的内容
let str = "dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd";
let result = str.match(/1[3-9]\d{9}/g);
console.log(result); // ['13715678903', '13457890657', '13811678908']
matchAll()
根据正则表达式去匹配字符串中符合要求的内容(必须设置g 全局匹配)
它返回的是一个迭代器
let str = "dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd";
result = str.matchAll(/1[3-9](\d{9})/g); // RegExpStringIterator {}
// 循环打印
for (let item of result) {
console.log(item);
// ['13715678903', '715678903', index: 6, input:
// 'dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd'
// , groups: undefined]等三个数据
}