主要是和极客时间的涂伟忠老师《正则表达式入门课》开始学习正则表达式
正则表达式测试网站,当然,浏览器的话直接f12也可以顺利上手
vscode 选中对应的按钮,也可以开启正则表达式匹配、替换的功能
1、基本元字符
- (.)点表示换行以外的任意单个字符
- \d 表示任意单个数字
- \w 表示任意单个数字或字母或下划线
- \s 表示任意单个空白符
- \D 和 \d 取反
- \W 和 \w 取反
- \S 和 \s 取反
- \r 回车符
- \n 换行符
在前端领域,更多出现的,还是 \n
d 是 digit 数字
w 是 word 单词
s 是 space 空白
2、量词,也就是出现的次数
- * 表示出现 0 —— 多次
- + 表示出现 1 —— 多次
- ? 表示 0—1 次,也就是 有或者没有 都可以
- {m} 表示 出现 m 次
- {m, } 表示出现 m —— 多次
- {m, n} 表示出现 m —— n 次
所以 类似于 rgba? 的话,能同时 匹配 rgba 和 rgb
3、范围
- | 表示或者,(1|2|3|4|5|6)
- [] 从中括号中选择,可以理解为里面的每一个字符都是 或, 而 常用的 0-9 a-z 则是 通过 ASCII 码进行范围匹配
- [^] 括号中的第一个字符为 ^ 的时候,表示为 非,里面的所有字符都被排除
- () 某一个群组,或者集合
4、查找
有了前面的基础,其实就可以进行一些简单的查找了
例如后端很糟糕的给了一个 日期: 20200202,想要获取里面的年月日,一开始只会使用 slice 来切割字符串
/(\d{4})(\d{2})(\d{2})/
- 这里使用了 () 来对正则进行分组,分成了三组
- 第一组是四个数字,第二组和第三组是两个数字
更近一步,就是进行命名分组了
命名分组的格式为(?P<分组名>正则)
/(?<year>\d{4})(?<month>\d{2})(?<day>\d{2})/
这里对每一个组都进行了命名
当然,除了 es6 新出的 exec 外,还有 其他的方法来获取提取出来的字符
RegExp.$1 第一个匹配的字符
RegExp.$2 第二个匹配的字符
以此类推
5、修饰符
- /i 忽略大小写
- /g 全局匹配
- /s 使得
.
可以匹配任意单个字符,包括换行符 - /m 匹配多行
- /u 匹配 unicode
- /y 粘连匹配
其实这里的 修饰符都要到 es2018 才完善
`<head>
<title>学习正则</title>
</head>`
例如想要匹配 head 标签中的内容就需要 /s
/<head>(.*)<\/head>/s