前言:一般开发中都会接触到正则表达式,作为一名合格的前端,也应该了解一下正则表达式编写原则,便于自己也能快速编写想要的正则表达式。

1、作用

正则表达式是一种字符串匹配的模式

数据验证:比如电话号码、邮箱等

替换文本:快速找到特定文本,用于替换

快速提取字符串:基于匹配原则,快速从文档中查找或提取子字符串

2、语法(普通字符+特殊字符)

普通字符

[abc] 匹配[...]的所有字符

[^abc] 取反,除了[...]的其他字符

[A-Z] 区间字母A到Z

. 匹配除(\n换行符 \r 回车符)的任何单个字符

\s 匹配所有,\s所有空白符,包括换行

\S 匹配所有,非空白符,不包括换行

\w 匹配字母、数字、下划线

特殊字符

$ 结尾位置 (匹配$字符----\$)

^ 开始位置(匹配$字符----\^)

() 子表达式开始和结束(匹配字符----\(   和  \))

* 匹配零次或多次(匹配字符----\*)

+ 匹配一次或多次(匹配字符----\+)

? 匹配零次或一次(匹配字符----\?)

| 两项间的一个(匹配字符----\|)

限定符

{n} n为非负整数,匹配n次

{n,} n为非负整数,至少n次

{n,m} n为非负整数,n<=m,最少n次,最多m次

修饰符

i 不区分大小写

g 全局匹配

m 多行匹配

s 特殊字符远点包含换行符

3、常用场景

16进制颜色 

/^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/

以#开始 ,6或3个字符(a-f、A-F、0-9)结尾

电话号码 

/^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/ 

以1开头

3可跟任一数字:3\d

4可跟5-9:4[5-9]

5可跟0-3或5-9:5[0-35-9]

6后2567其中一个:6[2567]

7后是0-8:7[0-8]

8后任一数字:8\d

9后是0-3或3-5:9[0-35-9])

其余8位是任意数字(\d{8})

/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/

身份证号

/^[1-9]\d{5}(19|20|21)\d{2}(0[1-9]|10|11|12)(0[1-9]|[1-2]\d|30|31)\d{3}[\dX]$/ 

第一位在0-9区间:[1-9]

后面是5位任意数字:\d{5

4位年份(19、20、21开头,后两位任意):(19|20|21)

两位代表月份(0开头的1-9或者是10、11、12):\d{2}(0[1-9]|10|11|12)

两位日期(01-31):(0[1-9]|[1-2]\d|30|31)

三位顺序码:\d{3}

最后一位是校验码,可数字可X:[\dX]$/ 

网址

https://

:----?):)?

/----\/

([^?:/]+)(:(\d+))?(\/[^?]*)?(\?(.*))?

/^((https?):)?\/\/([^?:/]+)(:(\d+))?(\/[^?]*)?(\?(.*))?/

邮箱 

^[A-Za-z0-9-_\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$       名称有汉字([\ue00-\u9fa5])、字母([a-zA-z])、数字、下划线、中划线,域名有数字、字母、下划线、中划线

4、使用方法

字符串.match(正则):返回符合的字符串,若不满足返回null

字符串.search(正则):返回搜索到的位置,若非一个字符,则返回第一个字母的下标,若不匹配则返回-1

字符串.replace(正则,新的字符串):找到符合正则的内容并替换

正则.test(字符串):在字符串中查找符合正则的内容,满足则返回true,反之为false