正则表达式
创建方式
- 字面量
- new对象 new RegExp('正则表达式','修饰符')
模式修正符
- ig 不区分大小写,全局匹配
- u 当使用语法元素\p的时候,要用上u模式
元字符(最小单位)
- \d 数字
- \D 除了数字
- \w 字母、数字、下划线
- \W 除了字母、数字、下划线
- . 除了换行符,其余所有字符
- \s 空格、制表符、换行
- \S 除了空格、制表符、换行
- 空格和普通字符abc一样
- \n 换行符
转义
- 使用反斜杠\
- 对象的方式创建正则时,双反斜杠才能表示转义 \n
选择符 |
- 左边全部和右边全部内容 /abc|123/ abc或者123
重复匹配(默认是贪婪的)
- ? 0个或1个
- *星号 0个或多个
- +加号 1个或多个
- {1,3} 1个到3个
- 禁止贪婪 ?? *? +? {1,3}?
- 禁止贪婪的场景:禁止.+把后面所有内容都给匹配完了
边界限制
原子表 (单个字符)
- 区间 [0-9]
- 排除 [^abc135]
- 原子表中的+和.不会被解析 例如:[123+] 1或2或3或+
原子组
- 组编号 数左括号是第几个
- 组取别名 (?.*) str.replace(reg, '<h1>$<title>')
- 不记录组 (?:.*)
断言(条件语句)
- /中国人(?= )/ 匹配后边是空格的'中国人'
- /(?<= )中国人/ 匹配前边是空格的'中国人'
- /中国人(?! )/ 匹配后边不是空格的'中国人'
- /(?<! )中国人/ 匹配前边不是空格的'中国人'
- /^(?! .星绿色.星).*/ 匹配字符中不能出现绿色
正则方法
- test 检测是否能找到匹配的字符
使用多个正则完成验证 regs.every(reg=>{return reg.test(str)})
- exec 配合lastIndex和while能完成全局匹配
能使用正则的字符创方法
- replace
str.replace(reg,'123$1') $&指整体,$1指第一个院子组
str.replace(reg, (v,p1,p2)=>{return 123 + p1})
- match
正则非全局模式,返回第一个匹配项中包括组的详细信息
正则全局模式,返回多个匹配项,但不含详细信息
- matchAll 返回一个迭代对象,使用for of,可以拿到各个匹配项的所有详细信息
- search str.search(reg) 返回匹配的子字符串的起始位置
- split str.split(reg)