如何构建一个正则表达式
- 构造函数:
new RegExp("正则主体",[修饰符]) - 字面量:
/正则主体/修饰符
方法
test关键字,用来检测一个字符串是否符合一定规则,返回值true和false
let str="123@qq.com"
let ret0 = /qq.com$/.test(str)
console.log(ret0) //true
exec关键字,捕获匹配到的符合的第一条内容。返回一个数组,index索引表示匹配内容第一个字符出现的位置
let str="123456@qq.com"
let ret1 = /(@)(qq.com)$/.exec(str)
let ret2 = /163.com$/.exec(str) // null
ret1结果如下:
元字符
.通配符,匹配单个的任意字符[范围]匹配范围中的任意一个。比如:[a-z][A-Z][0-9],注意:[^范围],取反的意思,比如:[^a-z],表示除了a-z的其余任意字符\d匹配单个数字 相当于[0-9],\D匹配单个非数字,相当于[^0-9]\w匹配单个的数字,字母,下划线 相当于[a-zA-Z0-9_];\W匹配单个非数字,非字母,非下划线 相当于[^a-zA-Z0-9_]\s匹配单个空白字符 空格 换行(\n),制表(\t)\S匹配单个非空白字符
限定元字符
^行首匹配 必须以后面的字符开头$行尾匹配 必须以前面的字符结尾{m}表示出现m次。 相当于{m,m}{m,}没有上限,最少匹配m次。{m,n}至少匹配m次,最多匹配n次。?等价于{0,1}要么不出现,要么出现一次。*等价于{0,}匹配任意次(包含零次)。+等价于{1,}至少出现一次。
例子
手机号码加星号
function formatPhone(phone) {
return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
}
let ret = formatPhone("13800000000")
console.log(ret)//138****0000
批量替换
function formatUUID(uuid) {
return uuid.replace(/-/g, "_")
}
const ret = formatUUID('3083c53a-89a5-491c-967e-b3551a6b91f0')
console.log(ret)// 3083c53a_89a5_491c_967e_b3551a6b91f0
数字字符串转大写
function formtCnNumber(str) {
const arr = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
return str.replace(/\d/g, (i) => {
return arr[i]
})
}
const ret = formtCnNumber("9876543210")
console.log(ret)
实现一个简单的模板引擎
function simpleTmpl(str, dataArr) {
return str.replace(/\{(\d)\}/g, (...args) => {
console.log('a', args)
return dataArr[args[1]]
})
}
const str = '我的名字是:{0},今年{1}岁,住在{2}'
const data = ['小李', 22, '北京']
const ret = simpleTmpl(str, data)
console.log(ret)