二二. 正则表达式
常用方法
const message = "fdabc123 faBC323 dfABC222 A2324aaBc"
const new1 = message.replaceAll(/abc/ig, '***')
console.log(new1); // fd***123 f***323 df***222 A2324a***
let count = 0;
const newMessage = message.replace(/abc/ig, (match) => {
count++;
return count <= 2 ? 'iii' : match; // 只替换前两个 'abc'
});
console.log(newMessage); // fdiii123 fiii323 dfABC222 A2324aaBc
const res1 = /abc/ig
// test: 检测某一个字符串中是否符合正则的规则
if (res1.test(message)) {
console.log('符合res1规则');
}
修饰符:
- g:Global,匹配全部
- i:Ignore,忽略大小写
- m:Multiple,多行匹配
字符集:
锚点
-
^:匹配文本开头
-
$:匹配文本结尾
-
词边界\b
- \b是一种检查,就像^ $一样,他会检查字符串在的位置是否在词边界
const message = 'My name is Why.'
if (/^my/ig.test(message)) {
console.log('以my开头');
}
if (/why.$/ig.test(message)) {
console.log('以why.结尾');
}
if (/why/ig.test(message)) {
console.log(111);
}
if (/\dwhy\d/ig.test(message)) {
console.log(222);
}
集合和范围
集合:
- 比如,[eao]表示查找在三个字符a e o中的任意一个
范围:
- []也可以包含字符范围
- 比如,[a-z]表示匹配从a到z范围内的字母,[0-5]表示0到5的数字
- [0-9A-F]表示两个范围:他搜索一个字符,满足数字0到9或A到F
- \d 和 [0-9]相同
- \w 和 [a-zA-Z0-9]相同
// 匹配手机号前三位:要求第二位数字不能是0 1 2
const phones = ['132', '110', '120', '155', '102']
const phoneReg = /^1[3456789]\d/
const filterPhones = phones.filter(item => phoneReg.test(item))
console.log(filterPhones); // ['132', '155']
// 简单的手机号匹配
const reg= /^1[3-9]\d{9}$/
量词
数量{n}
- 确切的位数:{5}
- 某个范围的位数:{3,5}
缩写
- +:代表
一个或多个,相当于{1,} - ?:代表
零个或一个,相当于{0,1},换句话说,他使得符号变得可选 - *:代表
零个或多个,相当于{0,},也就是说,这个字符可以多次出现或者不出现