正则参数:
g: 全局
i: 不分大小写
m: 视为多行影响行首和行尾 ^or$
s: 视为单行模式,忽略换行
y: 从 `regexp.lastIndex` 开始匹配
u: 正确处理四个字符的 UTF-16 编码
创建正则的方法: 多个正则可以写在数组中进行验证
1 字面量创建 var reg = /a/
2 对象创建 var reg = new RegExp('a')
字面量创建和构造函数创建的区别:
字面量匹配不可以直接是变量,构造函数匹配可以直接是变量
console.log("\d" === "d") // true
注:字面量和对象创建中的转译写法
正则的匹配与字符串匹配的方法
正则对象方法:test / exec
Reg.test(str) ---- 返回true/false
Reg.exec(str) ---- 返回数组/null
String对象方法:match / replace
String.match(reg) ----返回数组/null (默认找到一个 可以设置g进行全局匹配)
String.matchAll(reg) --- 返回迭代器
String.replace(reg,'') ---- 返回替换后的字符串
String.search(reg) --- 返回索引
String.split(reg) ---字符串转数组
正则属性
lastIndex:正则的属性
Reg.lastIndex = 4; // 索引
原子表和原子组
原子表-----
[] 原子表 本身就有 ‘|’ 的逻辑运算
原子表中的特殊字符,是其本身的字符串含义
原子组----
()原子组 使用前面的原子组用 /1 or /2 ...即可
1 $符号的含义
$1 $2 $3... $n, 其中n代表第几个原子组中的值
$& 匹配的内容 =》/0
$` 内容替换成内容前面的内容
$' 内容替换成内容后面的内容
2 ?:忽略原子组
?: 忽略原子组 在math或exec中不记录原子组 如:(?:\w)
3 原子组如何起别名
原子组起别名 ?<link> (?<link>) 此组的别名是link link的内容是此组的内容
断言
断言 注意这是条件不是组
const str = '苹果元10元'
零宽前断言 ?=exp 匹配前面为 exp 的内容 (?=元) const reg = /\d{2}(?=元)/gi;
零宽后断言 ?<=exp 匹配后面为 exp 的内容 (?<=元) const reg = /(?<=元)\d{2}/gi;
console.log(str.replace(reg,'贵')) //苹果元贵元
?!exp 零宽负向先行断言 后面不能出现 exp 指定的内容
?<!exp 零宽负向后行断言 前面不能出现exp指定的内容
. 除换行外任何字符 (注:遇到第一个换行符继续匹配,知道遇到第二个停止)
^和$ 限时边界条件
\d 数字
\w 字母数字下划线
\s 空白和换行符
贪婪匹配
+ 一个或者多个
* 0个或者多个
? 0个或者1个
{1} 1个
{1,} 1个或多个
{1,5} 1个到5个
禁止贪婪 加?
如: *? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复