正则
[]:每个[]代表一位
[0-9a-zA-Z]
[A-z]: 字母和 _
[^0-9]:排除0-9
[\u4e00-\u9fa5]: 中文
元字符:
\d:[0-9]
\D:[^0-9]
\w:[0-9a-zA-Z_]
\W:[^0-9a-zA-Z_]
.: 任意字符,除了\n换行
\b: 单词边界
量词: 贪婪匹配
reg+ : 1-多
reg?: 0-1
reg*: 0-多
reg{n,} n-多
reg{n,m} n-m
选择:
(a|b|c):匹配 a 或 b 或 c
限定符:
^: 开头
$: 结尾
贪婪匹配:能匹配多,不匹配少
非贪婪匹配:能匹配少,不匹配多 量词后加?
断言:
正向确定断言:reg(?=reg2) 获取后边是reg2的reg
正向否定断言:reg(?!reg2) 获取后边不是reg2的reg
反向确定断言:(?<=reg2)reg 获取前边是reg2的reg
反向否定断言:(?<!reg2)reg 获取前边不是reg2的reg
分组:(),每个()为1组
命名捕获分组: (?P<名字>)
命名非捕获分组:(?:P<名字>)
反向引用:()()\2 反向引用第2组
python 正则验证: re模块
match(r'reg',string,flag(i,s,m)): 匹配以reg头的
search(r'reg',string,flag(i,s,m)): 匹配符合reg第一个
findAll(r'reg',string,flag(i,s,m)):
没有分组: 返回匹配结果的列表
有1个分组: 只返回分组匹配结果的列表
有多个分组: 返回多个分组元组组成的列表
sub(r'reg',r'\2替换值',string,count,flag(i,s,m)) 替换
split(r'reg',string,maxsplit,flag(i,s,m)) 拆分
python修饰符:
i:忽略大小写
m: 多行匹配
s: 匹配包括\n的任意字符
js修饰符:
i:忽略大小写
m: 多行匹配
s: 匹配包括\n的任意字符
g: 全局匹配
js 正则验证
String方法:
search
match
split
replace
RegExp:
exec(str):随游标的移动进行检测
test(str): 返回bool类型
正则使用
<script>
//定义正则
// let reg=new RegExp('/\d+/','g')
let reg = /^\d+$/g
//RegExp方法
//1.test返回bool
let res = reg.test('12ab3df')
console.log(res) //false
let regs = /\d+/
let ress = regs.test('12asd12')
console.log(ress) // true
//2.通过游标移动获取
let reg2 = /\d+/g
console.log(reg2.lastIndex) //0
let res2 = reg2.exec('12ab3df')
console.log(res2)
console.log(reg2.lastIndex) //2
res2 = reg2.exec('12ab3df')
console.log(res2)
console.log(reg2.lastIndex) //5
res2 = reg2.exec('12ab3df')
console.log(res2)
</script>
字符串验证正则
string方法
search(reg):返回第一个符合条件的下标
match(reg):
不是全局匹配,返回符合条件的第一个子串数组
是全局匹配,返回符合条件的所有子串组成数组
split(reg):按照reg拆分
replace(searchvalue,newvalue):替换
regexp方法
exec(str):随游标的移动进行检测
test(str): 返回bool类型
<script>
let reg = /\d+/g
let str = '12ab3df'
let res = str.search(reg)
console.log(res) //0
let res2 = str.match(reg)
console.log(res2) //['12', '3']
let res3 = str.split(reg)
console.log(res3) //['', 'ab', 'df']
</script>
字符串替换
第一个参数:匹配到的字符串 $0
中间的参数:如果正则使用了分组匹配就为多个$1,
2
,
.
.
.
2,...
2,...n
倒数第二个参数:匹配字符串的对应索引位置 $n+1
最后一个参数:原始字符串 $n+2
<script>
let str = 'YYYY-MM-DD'
let newStr = str.replace('YYYY', 2024).replace('MM', 12).replace('DD', '06')
console.log(newStr) //2024-12-06
//改为驼峰命名
let str2 = 'background-color'
let newStr2 = str2.replace(/-([a-zA-Z])/, ($0, $1) => $1.toUpperCase())
console.log(newStr2)
//将所有数字替换为 w ,注意加全局匹配
let str3 = 'a1b2c3'
let newStr3 = str3.replace(/\d+/g, 'w')
console.log(newStr3) //awbwcw
// 手机脱敏
let str4 = '13047869561'
let newStr4 = str4.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
console.log(newStr4)
</script>