简单来说,正则表达式就是描述字符串的规则,其作用如下:
1、校验数据的有效性;
2、从文本中提取内容;
3、文本内容替换;
元字符
元字符即正则表达式中具有特殊含义的专用字符,主要分为5类。
1、基础
- . 任意字符(换行除外)
- \d 任意数字
- \D 任意非数字
- \w 任意数字字母下划线
- \W 数字字母下划线以外的任意字符
- \s 任意空白符
- \S 任意非空白符
2、空白符
- \r 回车符
- \n 换行符
- \f 换页符
- \t 制表符
- \v 垂直制表符
3、量词
- *含义:0到多次
- +含义:1到多次
- ?含义:0到1次,如colou?r
- {m}含义:出现m次
- {m,n}含义:m到n次,
- {,n} 其中m不写代表0,至多n次
- {m,} 其中n不写代表无穷大,至少m次
4、范围
- | 或,如ab|bc代表ab或bc
- [...]多选一,括号中任意单个元素
- [a-z]匹配a到z之间任意单个元素(按ASCII表,包含a,z)
- [^...]取反,不能是括号中的任意单个元素
5、边界
- ^ 匹配行的开始,多行模式时,可以匹配任意行开头
- $ 匹配行的结束,多行模式时,可以匹配任意行结尾
- \b 匹配单词边界
- \A 仅匹配整个字符串的开始,不支持多行模式
- \Z 仅匹配整个字符串的结束,不支持多行模式
二、贪婪与非贪婪
1、贪婪:正则表达式中,表示次数的量词默认是贪婪的,默认尽可能多的去匹配
2、非贪婪: “数量”元字符后加?(英文问号)找出长度最小且满足要求的
三、环视
环视就是在我们给定的规则前或者规则后加一些限制:
- X(?<=Y) 匹配前面是Y的X
- X(?<!Y) 匹配前面不是Y的X
- X(?=Y) 匹配后面是Y的X
- X(?!Y) 匹配后面不是Y的X
四、子组
- (正则)将regex保存成一个子组
- (?P<name>正则)命名子组,将regex保存成名称为name的子组
- (?:正则)仅分组,不保存这个子组
- \分组编号 重复某个子组
示例:
const codepattern = /{% *(\S+?)(?: *| +.+?)%}[\s\S]+?{% *end\1 *%}/g;
// 匹配代码块 {% ... %}
参考资料
推荐学习网站: https://regex101.com