1 基本概念
正则表达式中的元素由字符和元字符组成。字符又叫做普通字符即普通的计算机编码,如我们常用的英文字符、数字、中文等等;元字符又被称为特殊字符即在正则表达式中存在特殊意义的字符,如\
、*
、$
等等,详情可见MDN 文档。本文主要介绍正则表达式的基本使用,以及一些常见正则问题的处理。
2 一对一匹配
正则表达式与目标字符一对一匹配。
当我们想匹配a
字符,正则表达式可以直接写成/a/
。
但是匹配的是元字符时,如$
,直接写成/$/
是无法匹配成功的,因为$
在正则中存在特殊意义。
此时我们需要使用\
对元字符进行转义,即消除元字符的特殊意义。
个别普通字符在\
的修饰下也会拥有特殊含义,如\n
(换行)、\r
(回车)等等。
小结:匹配普通字符:/普通字符/
;匹配元字符:/\元字符/
。
正则表达式 | 描述&举例 | 关联 |
---|---|---|
/普通字符/ |
匹配普通字符 | - |
/\元字符/ |
匹配元字符 | - |
/\n/ |
匹配换行符(LF) | 换行和回车 |
/\r/ |
匹配回车符(CR) | 换行和回车 |
/\f/ |
匹配换页符 | - |
/\t/ |
匹配制表符(Tab) | - |
/\v/ |
匹配垂直制表符 | - |
3 一对多匹配
正则表达式之所以强大,就是其能进行模糊匹配。使用集合、区间和通配符的方式实现一对多的匹配,实现字符模糊。涉及:
[]
、-
、通配符
。
3.1 集合
使用[]
或者[^]
将字符一一列举,[]
:代表匹配列举的内容;[^]
:代表匹配除列举以外的内容。
假如想匹配 1 到 9 之间的任意一个奇数,[一对一匹配](#2 一对一匹配)肯定无法满足当前的要求。此时我们可以使用集合的方式来处理。
3.2 区间
需要匹配的字符连贯时,可以使用一个-
区间来代替一一列举
当需要匹配任意大于 4 的数字时,我们可以直接写成/[56789]/
,但是更简单的方法是写成/[5-9]/
。
/[a-z]/
:匹配任意小写字母;/[\u4e00-\u9fa5]/
:匹配任意汉字;
3.3 通配符
通配符用于匹配一类字符。
在开发中时常会遇到仅允许用户输入数字的场景,用区间方式可写成/[0-9]/
,如果用通配符写法可以写成:\d
。懒惰才是人类文明进步的真正动力呀;
集合、区间和通配符可以合并使用的,当他们同时存在时会取它们的并集。
小结:集合写法:/[列举字符]/
;区间写法:/[开始-结束]/
;通配符写法:/通配符/
。
正则表达式 | 描述&举例 | 关联 |
---|---|---|
/[13579]/ |
[] 列举的全部字符 |
- |
/[5-9]/ |
[] 内区间的全部字符 |
- |
/\d/ |
匹配全部数字 | 等价于[0-9] |
/\D/ |
匹配除数字以外的任意字符 | 等价于 [^\d] |
/\w/ |
0 至 9、a 至 z、A 至 Z 以及_ | 等价于 [a-zA-Z_\d] |
/\W/ |
0 至 9、a 至 z、A 至 Z 以及_以外字符 | 等价于 [^\w] |
/\s/ |
全部空白字符,如: 空字符、\n、\r、\f、\t、\v |
等价于[\n\r\f\t\v ] |
/\S/ |
全部非空白字符 | 等价于[^\s] |
/./ |
除\n 和\r 以外的全部字符 | 等价于[^\n\r] |
4 次数限定
本节就来讲讲设置字符重复的次数,实现长度模糊。涉及:
?
、{}
、*
、+
4.1 ?
元字符
使用?
修饰的字符或者分组可匹配 0 次或者 1 次。如正则:/https?/
,可以同时匹配http
和https
。
4.2 {}
元字符
如果想同时匹配http
、https
和httpss
三种字符串,按照前面说的?
元字符可以写成/https?s?/
,但是这样的写法显然很冗长,这时我们就可以用到{}
元字符了,正则可写成/https{0,2}/
,{n,m}
修饰的字符或者分组可匹配n-m
次;{}
有四种写法:
-
{count}
:精确count 次; -
{min,max}
:min 次到 max 次; -
{min,}
:至少 min 次; -
{0,max}
:至多 max 次。
4.3 *
元字符
使用