正则表达式
大约 3 分钟...
正则表达式在通过一定的搜索模式下进行一个或多个匹配(即 ASCII 或 unicode 字符的特定序列)从任何文本中提取信息时非常有用,应用领域从验证到解析/替换字符串,将数据转换为其他格式以及网络爬虫
^ 和 $
^start
- 匹配任意以start
开头的字符串end$
- 匹配任意以end
结尾的字符串^JQiue$
- 匹配JQiue
the
- 匹配含有the
的字符串
量词
abc*
-abc
出现大于等于 0 次abc+
-abc
出现大于等于 1 次abc?
-abc
的出现是可选的abc{2}
-c
重复 2 次abc{2,3}
-c
重复 2 - 3 次abc{2,}
-c
至少重复 2 次
| 和 []
|
是一种表示或的运算符,例如(T|t)he|car
匹配(T|t)he
或car
条件匹配
?
可用于条件匹配,语法为(?(id)yes-pattern|no-pattern)
。其中id
可以是捕获组的编号或名称,表示如果该捕获组有匹配,则使用yes-pattern
, 否则使用no-pattern
分组
(...)
中包含的内容将会被看成一个整体
(abc)\d+
会将 abc
匹配为第一个捕获组, \d+
匹配为整个表达式
(?:abc)\d+
仅会将 \d+
部分作为捕获组, abc
部分不会被捕获
贪婪和惰性
正则表达式默认采用贪婪匹配模式,在该模式下意味着会匹配尽可能长的子串
匹配模式
模式主要用来指定正则表达式的匹配行为,影响正则匹配字符串时的具体行为
模式 | 描述 |
---|---|
i | 忽略大小写 |
g | 全局搜索,匹配所有字串,而不是第一个后停止 |
m | 多行修饰符:使 ^ $ 匹配各自行首尾,而不是整个字符串首尾 |
常用正则
// html注释
/<!--(.*?)-->$/
// x.y.z 格式的版本号
/^\d+(\.\d+){2}$/
// 图片链接地址
/^https?:\/\/.*?(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif)$/i
// 视频链接地址
/^https?:\/\/.*?(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)$/i
// 24小时制时间(HH:mm:ss)
/^((?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$)/
// 中文姓名
/^([\u4e00-\u9fa5·]{2,16})$/
// 英文姓名
/(^[a-zA-Z]{1}[a-zA-Z\s]{0,20}[a-zA-Z]{1}$)/
// URL链接(网址)
/^((https?|ftp|file):\/\/)?([\da-z.-]+)\.([a-z.]{2,6})(\/\w\.-]*)*\/?/
// 手机号(严谨), 根据工信部2019年最新公布的手机号段
/^1((3[\d])|(4[5,6,7,9])|(5[0-3,5-9])|(6[5-7])|(7[0-8])|(8[\d])|(9[1,8,9]))\d{8}$/
// 邮箱地址
/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
// 二代身份证号(18位数字)
/^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$/
// 是否为小数
/^\d+\.\d+$/
// 是否为 HTML 标签
/<(.*)>.*<\/\1>|<(.*) \/>/
// ip-v4
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/