正则表示中的特殊字符有不同的含义,一共分 6 种。分别是:
- 字符类别
- 字符集合
- 边界
- 分组和反向引用
- 数量词
- 断言
字符类别(Chraracter Classes)
常见的有
-
.
表示匹配任意字符 -
\d
表示匹配任意阿拉伯数字 -
\w
表示匹配任意字符(还包括下划线) -
\s
表示匹配一个空白符号
特殊字符的大写形式则表达了小写形式的反义,不在赘述
字符集合(Chraracter Sets)
-
[xyz]
表示匹配一个字符的集合,也叫字符组。别看它很长,其实它只匹配一个字符。可以使用-
来指定一个范围 -
[^xyz]
是上一个匹配方式的反义形式,叫做反义字符组。即匹配任意不包括在括号内的字符
边界(Boundaries)
-
^
匹配开始 -
$
匹配结尾
分组和反向引用(grouping & back references)
-
(X)
匹配 x 并且捕获匹配项,被称之为捕获型分组 -
(?:X)
非捕获型分组,仅做简单的匹配,并不会捕获所匹配的文本。有微弱的性能优势。非捕获型分组并不会干扰捕获型分组的编号。如果(?:X)?
带有后缀 ? 则表示这个分组是可选的 -
\n
n 是一个正整数,一个反向引用,指向正则表达式中第 n 个括号中匹配的子字符串
数量词(Quantifiers)
-
X*
匹配前面的模式次数大于等于 0 -
X+
匹配前面的模式次数必须大于等于 1。结合后面的总结,我们发现它其实等同于 {1,} -
X*?
同X*
,但是会匹配最小可能匹配。比如 /".*?"/ 匹配 '"foo" "bar"' 中的 '"foo"',而 * 后面没有 ? 时匹配 '"foo" "bar"' -
X?
匹配前面的模式 X 0 或 1 次。如果在数量词 *、+、? 或 {}, 任意一个后面紧跟该符号(?),会使数量词变为非贪婪( non-greedy) ,即匹配次数最小化。反之,默认情况下,是贪婪的(greedy),即匹配次数最大化 -
x|y
匹配 x 或 y -
x{n}
前面的模式 x 连续出现 n 次时匹配。{n,} 和 {n, m} 则表示次数的区间
断言(Assertions)
-
x(?=y)
条件限定,只有当 x 后面紧跟着 y 时,才匹配 x -
x(?!y)
条件限定,只有当 x 后面不是紧跟着 y 时,才匹配 x
常见正则表达式收集
// 验证邮箱
([a-z_A-Z0-9]+@[a-z_A-Z0-9]+\.(com|org|net))
// 验证网址
(?:https?:\/\/)?(?:[a-zA-Z0-9])+\.(?:com|net|org)
// 验证网址
^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$
网友评论