1. 通常使用字面量/创建,例如:/^1\d{10}$/.test(17355476130),但如果含有变量,使用new RegExp(str,mode)创建
  2. 正则|中竖线不是匹配单个字符,而是匹配两边的表达式,可以使用()限定范围
  3. 原子表[],代表匹配中括号中的任意一个字符,如匹配字母[a-zA-Z]
  4. 原子组(),可以理解为一个整体的表达式
  5. 字符串中'\d'==='d',\\d才代表\d
  6. \1代表第一个原子组
  7. 中括号中.就是点,+就是加,()就是括号,\.也是点
  8. ^$分别代表匹配的起始和结束位置
  9. ^也代表非,例如:/[\^\d]/.test("a")
  10. 模式修饰
  • i:不区分大小写
  • g:全局匹配
  • .:不包括\n,可以使用模式修饰\s忽略换行,让.也有换行
  • m:将每一行单独处理,每一行都是一个独立的部分和正则匹配
  • u :使用编码
  1. 元字符
  • \d,\D:[0-9],[^0-9]
  • \w,\W:[A-Za-z0-9_],[^A-Za-z0-9_]
  • \s,\S:[\n\f\r\t\v],[^\n\f\r\t\v]
  • [\s\S],[\d\D]等代表匹配所有字符
  • \b,\B:单词边界,非单词边
  1. 空格和普通字符一样可以直接使用空格\ \,也可以用\s,但\s会包含换行符
  2. 重复匹配,匹配的是前面的单个字符或组
  1. *,+,?:0-n,1-n,0-1
  2. {n},{n,},{n,m}:n,n-,n-m
  1. *?,+?,??,{n,m}?,{n,}? 会禁止贪婪匹配
  2. 匹配中文的方法:/\p{sc=Han}+/gu或者/[\u4e00-\u9fa5]+/g
  3. \t代表制表位tab\n代表换行,可以直接使用/\n/g
  4. 如果希望参与匹配但并不参与分组,可以使用(?:
  5. 断言,可以理解为匹配的条件,即不参与匹配也不参与分组
  1. x(?=exp) 零宽先行断言,x的后面必须出现exp
  2. (?<=exp)x 零宽后行断言,x的前面必须出现exp
  3. x(?!exp) 零宽负向先行断言,x的后面不能出现exp
  4. (?<!exp)x 零宽负向后行断言,x的前面不能出现exp
  1. 字符串方法(参数均可为正则或字符串)
  1. search:返回匹配的位置。
  2. match非全局会返回细节,否则返回数组,使用matchAll或者exec可以实现批量匹配细节,eg:[..."123".matchAll(/\d/g)]
  3. split 可以使用字符串或者正则分割字符串。
  4. replace 替换操作,可以替换为$,本身,左,右,N,还可以使用回调函数,以此参数为match子串,匹配项$n,偏移量offset,原字符串string。使用replaceAll可以实现批量替换。
console.log("张三出生2000年6月,今年22岁了".search(/\d+/))
// 输出:4
console.log("张三出生2000年6月,今年22岁了".match(/\d+/))
// 输出:['2000', index: 4, input: '张三出生2000年6月,今年22岁了', groups: undefined]
console.log("张三出生2000年6月,今年22岁了".match(/\d+/g))
// 输出:['2000', '6', '22']
console.log("张三出生2000年6月,今年22岁了".split(/\d+/))
// 输出:"张三出生2000年6月,今年22岁了".split(/\d+/)
console.log("张三出生2000年6月,今年22岁了".replace(/\d+/,"*"))
// 输出:'张三出生*年6月,今年22岁了'
console.log("张三出生2000年6月,今年22岁了".replace(/\d+/g,""))
// 输出:'张三出生*年*月,今年*岁了'
console.log("张三出生2000年6月,今年22岁了".replace("0","*"))
// 输出:'张三出生2*00年6月,今年22岁了'
console.log("张三出生2000年6月,今年22岁了".replaceAll("0","*"))
// 输出:'张三出生2***年6月,今年22岁了'
  1. 正则方法
  1. test: 检测一个字符串是否匹配某个模式,匹配则返回ture,不匹配则返回false
  2. exec:类似match,可以循环调用直到匹配结果为空结束(如此反复),通过lastIndex可以改变匹配起始位置,一定要在全局匹配模式下使用
console.log(/^\d{11}$/.test(12345678910)) //匹配手机号,输出:true
console.log(/^\d{11}$/.test("12345678910")) //匹配手机号,输出:true