正则表达式
介绍
正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。一个正则表达式是一种从左到右匹配主体字符串的模式,常使用缩写的术语regex
或regexp
。
其基本格式为 /主体/修饰符
。
可以在正则测试网站中尝试。
语法
匹配方式
正则表达式其实就是在执行搜索时的格式,它由一些字母和数字组合而成。
正则表达式 /Hello/g
其表示一个规则:由字母H开始,紧接着是ello的部分。
元字符
元字符指在正则表达式中具有特殊意义的专用字符。其可以用来规定前面的字符或表达式在目标对象中的出现模式。
在用到赋予功能的字符时要在其之前添加转义字符\
,如\\
、\.
、\*
。
匹配字符 | 介绍 | 匹配字符 | 介绍 |
---|---|---|---|
[abc ] |
匹配a,b,c中的任意一个字符 | [^abc ] |
匹配除a,b,c之外的任意字符 |
[a-g ] |
匹配a-g范围内的任意一个字符 | [^a-g ] |
不匹配a-g中的所有字符 |
[H-N ] |
匹配H-N范围内的任意一个字符 | [a-gH-N ] |
匹配a-g,H-N范围内的任意一个字符 |
[0-9 ] |
匹配0-9范围内的任意一个字符 | [0|9 ] |
匹配0或9 |
. |
匹配除换行符以外的任意字符 | x|y |
匹配x或y |
\s |
匹配任意的空白符 \n - 换行符 \r - 回车符 \t - 制表符\f - 换页符 \v - 垂直制表符 |
\S |
匹配非空白字符,等价与[^\s] |
\d |
匹配数字 | \D |
匹配非数字,等价与[^\d] |
\w |
匹配字母和数字 | \W |
匹配非字母和数字,等价与[^\w] |
频次范围/量词 | 介绍 | 频次范围/量词 | 介绍 |
---|---|---|---|
* |
重复零次或更多次{0,},贪婪模式 | *? |
非贪婪模式 |
+ |
重复一次或更多次{1,} | +? |
非贪婪模式 |
? |
重复零次或一次{0,1} | {n } |
重复n次 |
{n, } |
重复n次或更多次 | {n,m } |
重复n到m次 |
定位匹配 | 介绍 | 定位匹配 | 介绍 |
---|---|---|---|
^ |
字符串开始符 | $ |
字符串结尾符 |
\b |
匹配单词的开始或结束 | \B |
非单词边界 |
(exp ) |
匹配exp,并捕获文本到自动命名的组里 | (?:exp ) |
匹配exp,不捕获匹配的文本 |
(?=exp ) |
匹配exp前面的位置 | (?<=exp ) |
匹配exp后面的位置 |
(?!exp ) |
匹配后面跟的不是exp的位置 | (?<!exp ) |
匹配前面不是exp的位置 |
(?<name>exp ) |
匹配exp,并捕获文本到名称为name的组里 |
修饰符
正则表达式的修饰符是用于指定额外的匹配策略,该修饰符不在正则表达式中,放在正则表达式外/主体/修饰符
,可以叠加使用。
正则修饰符包含:
g
全局匹配
正则表达式中没有^
时,以整个字符串(单行/多行)的开头为开始(^
),以整个字符串(单行/多行)的结尾为结束($
),
正则表达式中含有^
时,只匹配第一行。m
多行匹配
启用多行模式后,只影响^
和$
的行为,
通常与全局匹配一起使用,否则也只匹配第一行i
忽略大小写匹配。
默认情况下是非全局匹配,非多行匹配,大小敏感匹配。
常用表达式
网址
1
/^(((ht|f)tps?):\/\/)?([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+[a-z]{2,6}\/?/
文件路径
1
/^[a-zA-Z]:\\(?:\w+\\)*\w+\.\w+$/
文件夹路径
1
/^[a-zA-Z]:\\(?:\w+\\?)*$/
邮箱
1
/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
包含大小写字母、数字、特殊符号其三的密码
1
/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\W_!@#$%^&*`~()-+=]+$)(?![0-9\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]/
一/二代身份证号
1
/^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/
手机号(宽松)
1
/^(?:(?:\+|00)86)?1[3-9]\d{9}$/
年月日(宽松)
1
/^\d{1,4}(-)(1[0-2]|0?[1-9])\1(0?[1-9]|[1-2]\d|30|31)$/
车牌号
1
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/