正则表达式由两部分组成:元字符、修饰符
元字符
元字符又分为量词元字符、特殊元字符、普通元字符
量词元字符
元字符 | 含义 |
---|---|
* | 0~多次 |
+ | 1~多次 |
? | 0次 或 1次 |
{n} | 出现n次,n为0或正整数 |
{n,} | n~多次 |
{n,m} | n~m次 |
特殊元字符
元字符 | 含义 |
---|---|
\ | 转义字符,可以普通转特殊 or 特殊转普通 |
. | 除了\n以外的任意字符 |
^ | 以…开头 |
$ | 以…结束 |
\n | 换行 |
\t | 一个制表符tab(四个空格) |
\d | 0~9之间的一个数字 |
\D | 非0~9之间的一个数字 |
\w | 数字、字母、下划线中的任一字符 |
\W | 非数字、字母、下划线的任一字符 |
\s | 一个空白字符(空格、制表符、换页符等) |
\S | 除了空白字符的任一字符 |
\b | 一个单词边界 |
\B | 除单词边界的任一字符 |
x | y |
[xyz] | x或y或z中的一个字符 |
[^xy] | 除x、y之外的任一字符 |
[a-z] | a-z范围内的任一字符, [A-Z],[0-9]同理 |
[^a-z] | 非a-z范围内的任一字符 |
() | 分组 |
(问号冒号) | 只匹配不捕获 |
(?=) | 正向预查 |
(?!) | 负向预查 |
特殊详细说明:
- ^ $
/^\d/
:以数字开头/\d$/
:以数字结尾/\d/
:只要包含数字即可/^\d+$/
:只能是1~多个数字- 验证手机号码(11位, 以1开头): /^1\d{10}$/
- \ 转义字符
- /^2.3$/ => 注:
.
不代表小数点,而是除\n以外的任一字符 - 若只想匹配
2.3
,则应将.
进行转义,即/^2.3$/ let str = "\d"; reg = /^\d$/
=> 不匹配,字符串中\d也有特殊含义;/^\\d$/.test("\\d")
=> 匹配
- /^2.3$/ => 注:
- x|y
- eg.
let reg = /^18|29$/
,我们想要得到18或29。但18、29、129、189、1829、829、182
全部符合! - 根据上例,对于2位及以上的数字,直接使用x|y这种方式存在很乱的优先级问题。一般我们使用()分组,改变优先级,即
/^(18|29)$/
。
- eg.
- []
- []中出现的字符一般都代表本身的含义。eg.
/^[@+]+$/
,第一个+代表它本身,即"+"字符;第二个+代表出现1~多次。 - 注意:[\d]的本身含义就是0-9范围内的一个数字,[\d]将其转义就变为普通字符[\d],代表""或者"d"其中的一个。
- []中不存在多位数。例如,[18]的含义为1或8,而不是18;[10-29]代表1、0到2(其中一个)、9三个字符,而不是10到29。
- []中出现的字符一般都代表本身的含义。eg.
普通元字符
代表本身含义,无需记忆。
修饰符
修饰符 | 含义 |
---|---|
i | 忽略大小写匹配 |
m | 忽略换行匹配 |
g | 全局匹配 |