| 代码/语法 | 说明 |
| — | — |
| [aeiou] | 匹配aeiou中任一字符 |
| [^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
转义字符
| 代码/语法 | 说明 |
| — | — |
| \a | 响铃 |
| \t | 制表符 |
| \r | 回车符 |
| \n | 换行符 |
| \f | 换页符 |
| \b | 退格 |
| \e | ESC |
| \v | 垂直制表符 |
| \cC | 控制字符(如ctrl+c) |
| \040 | 八进制(0开头) |
| \x20 | 十六进制(x开头) |
| \uA0FF | Unicode字符 |
| \G | 当前搜索的开头 |
| \A | 必须出现在字符串开头 |
| \Z | 必须实现在字符串结尾或\n
之前 |
| \z | 必须实现在字符串结尾 |
| 注1 | 在[]中,正则表达式中有含义的字符都要再前方加\
转义。如\
写作\\
|
| 注2 | \b在[]中才表示退格,在外面表示单词边界 |
| 注3 | 正则表达式不允许双引号中出现单引号 |
注意换行的回车不是一个东西,虽然我们看上去是一样的。这个和编码发展历史有关,区别见下表:
| Unicode序列 | 正则 | 名称 | 简写 | 描述 |
| — | — | — | — | — |
| U+000DU+000A | (\r\n) | 回车换行 | CRLF | Windows,DOS中的文本文件 |
| U+000D | (\r) | 回车 | CR | 旧版的MacOS中的文本文件 |
| U+000A | (\n) | 换行 | LF | Unix,Linux,BSD和OSx中的文本文件 |
限定符
贪婪的
| 代码/语法 | 说明 |
| — | — |
| * | 重复零次或更多次 |
| + | 重复一次或更多次 |
| ? | 重复零次或一次 |
| {n} | 重复n次 |
| {n,} | 重复n次或更多次 |
| {n,m} | 重复n到m次 |
非贪婪的
| 代码/语法 | 说明 |
| — | — |
| *? | 重复任意次,但尽可能少重复 |
| +? | 重复1次或更多次,但尽可能少重复 |
| ?? | 重复0次或1次,但尽可能少重复 |
| {n,m}? | 重复n到m次,但尽可能少重复 |
| {n,}? | 重复n次以上,但尽可能少重复 |
分组
我们已经提到了怎么重复单个字符,但如果想要重复多个字符又该怎么办?你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了。 比如
(?#这一行是个注释,注释这样写)
^abc{2,} (?#匹配ab开头后面2个及以上c)
^a(bc){2,} (?#匹配a开头后面2个及以上bc)
每一个()
中的变量都会被分配一个编号((?:exp)
除外),按()出现顺序,从左到右,从外到内编号,从1开始。编号0默认代表整个表达式。可以利用\
+ 编号的形式访问对应编号的匹配。例如:
<([>]*)>[<>]*</\1> (?#匹配一对不含子标签的xml标签及里面的内容)
在.Net中,可以用(?<name>exp)
为表达式命名,此时,该表达式也同时具有编号,可以用\k<name>
访问这个表达式。需要注意的是,系统会按从左到右,从外到内的顺序给没有名字的表达式编号,然后再从头开始按从左到右,从外到内的顺序给有名字的表达式编号。
当然还有一些有意义的括号,除了(?:exp)
以外,都会带有编号。下面是完整的分组说明:
| 代码/语法 | 说明 |
| — | — |
| (exp)
| 普通分组 |
| (?<name>exp)
| 名为name的分组 |
| (?:exp)
| 匹配字符串exp,但不为其分配组号 |
零宽度断言
何为断言:断言某个位置会出现,或不会出现某个模式,但不去匹配这个模式。当断言不成功时,不再匹配。
| 代码/语法 | 说明 |
| — | — |
| (?=exp)
| 匹配字符串exp前面的位置 |
| (?<=exp)
| 匹配字符串exp后面的位置 |
| (?!exp)
| 匹配后面不是字符串exp的位置 |
| (?<!exp)
| 匹配前面不是字符串exp的位置 |
| (?>exp)
| 只匹配exp一次 |
逻辑运算符 或
| 代码/语法 | 说明 |
| — | — |
| | | 逻辑或 |
递归匹配
这个和上面的分组命名不矛盾,这个就是那个部分的扩展。
| 代码/语法 | 说明 |
| — | — |
| (?exp) | 把匹配的内容命名为name,入栈 |
| (?<-name>exp’) | 从栈中弹出一个内容 |
| (?(name) yes | no) | 如果栈中存在名为name的内容就匹配yes部分,否则匹配no部分,这里yes和no分别是2段表达式 |
运算符优先级
从上到下从高到低,同一高度顺序运算
| 优先级 |
| — |
| \ 转义字符 |
| () , [] |
| * , + , ? , {n}, {n, } , {n, m} |
| ^ , $ , \元字符 |
| | |
常用的正则表达式
验证数字类型输入
-
数字:
^[0-9]*$
-
n位的数字:
^\d{n}$
-
至少n位的数字:
^\d{n,}$
-
m-n位的数字:
^\d{m,n}$
-
零和非零开头的数字:
^(0|[1-9][0-9]*)$
-
非零开头的最多带两位小数的数字:
^([1-9][0-9]*)+(.[0-9]{1,2})?$
-
带1-2位小数的正数或负数:
^(\-)?\d+(\.\d{1,2})?$
-
正数、负数、和小数:
^(\-|\+)?\d+(\.\d+)?$
-
有两位小数的正实数:
^[0-9]+(.[0-9]{2})?$
-
有1~3位小数的正实数:
^[0-9]+(.[0-9]{1,3})?$
-
非零的正整数:
^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
-
非零的负整数:
^\-[1-9][]0-9″*$ 或 ^-[1-9]\d*$
-
非负整数:
^\d+$ 或 ^[1-9]\d*|0$
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后
文章到这里就结束了,如果觉得对你有帮助可以点个赞哦,如果有需要前端校招面试题PDF完整版的朋友可以点击这里即可获取,包括答案解析。
包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后
文章到这里就结束了,如果觉得对你有帮助可以点个赞哦,如果有需要前端校招面试题PDF完整版的朋友可以点击这里即可获取,包括答案解析。
[外链图片转存中…(img-Fw5SrNRr-1713350372565)]