在阅读之前,希望您对正则表达式有过一些使用经验,本文介绍 4 个部分:
- 锚点
- 特征标群
- 贪婪模式和惰性匹配
- 零宽度断言
锚点
^
:匹配文本应该在字符串的开头
$
: 匹配文本应该在字符串的结尾
例如
/^(T|t)he/
匹配 The car is parked in the garage.
中的 The
。对于多行文本,开启
g
(全局搜索)和m
(多行修饰符)标志。例如对于多行字符串:The car is parked in the garage. The car is parked in the garage.
/^(T|t)he/gm
可以匹配两个 The
。特征标群
特征标群是指写在
(...)
中的子模式。用途 1: 子模式中可以包含多个字符,它们被视为“一体”。可以搭配
*
、.
、?
使用。用途 2: 配合
|
使用。例如 /(ab|ef)c/g
匹配 abc efc
中的 abc 和 efc。贪婪模式和惰性匹配
正则表达式默认是贪婪模式,也就是尽可能多的匹配。例如
/.*at/
匹配 The fat cat sat on the mat.
的全部。可以理解为:从符合匹配的位置开始,尽可能地向后搜索,直到不能向后。开启惰性匹配的方法是使用
?
,形如 /.*?at/
、/.+?at/
。例如 /.*?at/
匹配 The fat cat sat on the mat.
中的 The fat
。可以理解为:从符合匹配的位置开始,向后搜索,一旦完成匹配,立即停止。零宽度断言
虽然名字很唬人,但是它很有用。通俗来说,它用来检查符合匹配规则的字符串的前/后是否符合规则。
对于先行断言
?=
和?!
来说,它们检查“后面”是否符合规则。例如:\\(T|t)he(?=\\sfat)\\
匹配The fat cat sat on the mat.
中的The
\\(T|t)he(?!\\sfat)\\
匹配The fat cat sat on the mat.
中的the
对于后发断言,它们检查“前面”是否符合规则。
推荐
- 练习:正则在线匹配平台