什么是正则表达式
正则表达式是由一个字符序列形成的搜索模式。
当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。
正则表达式可以是一个简单的字符,或一个更复杂的模式。
正则表达式可用于所有文本搜索和文本替换的操作。
正则表达式语法
// /正则表达式主体/修饰符(可选)
var pattt =/runboo/i;
// /runboo/i 是一个正则表达式
//runboo 正则表达式的主体即被匹配的字串
//i 是一个修饰符,即表示不区分大小写`
修饰符
i | 表示不区分大小写 |
g | 在全局范围内进行搜索 |
m | 用于执行多行匹配 |
正则表达式-元字符
下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为:
字符 | 描述 |
---|---|
\ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,‘n’ 匹配字符 “n”。’\n’ 匹配一个换行符。序列 ‘\’ 匹配 “” 而 “(” 则匹配 “(”。 |
^ | 匹配输入字符串的开始位置。表示以该字符串开头的才匹配,当用在方括号内时表示,非 |
$ | 匹配字符串结束的位置,表示以该字符串结束的才匹配 |
* | 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。 |
+ | 用于匹配前面的字符一次或多次,例/zo+/,则匹配,zo、zoo\zoos,则zpo不匹配 |
? | 匹配字符串一次或零次 |
{n} | n必须为一个正整数,表示匹配字符n次 |
{n,} | 表示最少匹配字符n次 |
{n,m} | 最少匹配n次但最多匹配字符m次 |
x | y |
[xyz] | 用于匹配方括号内的任意一个字符 |
[^xyz] | 表示匹配除方括号内的所有字符 |
[a-z] | 匹配指定范围内的任意字符,这个例子是用于匹配所有的小写字母 |
[^a-z] | 匹配不在指定范围内的任意字符,用于匹配除小写字母的所有字符 |
\b | 用于匹配字符串的边界值,在字符前面表示前面为字符边界,在后面表示后面是字符边界 |
\B | 和\b相反,匹配不在字符边界 |
\d | 匹配一个数字即[]0-9 |
\D | 匹配一个非数字的字符 |
\s | 匹配一个空白字符,包括空格、制表符、换页符等 |
\S | 匹配一个非空白字符 |
\w | 匹配数字、字母、下划线 |
\W | 匹配非数字、字母、下划线 |
特殊字符
所谓特殊字符,就是一些有特殊含义的字符,用这些字符来表示一个或多个字符串,如果需要查找特殊字符中的字符,需要使用\进行转义
特殊字符 | 描述 |
---|---|
() | 用于表示一个字符的开始和结束位置 |
^ | 匹配输入字符串的开始位置。表示以该字符串开头的才匹配,当用在方括号内时表示,非 |
$ | 匹配字符串结束的位置,表示以该字符串结束的才匹配 |
* | 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。 |
+ | 用于匹配前面的字符一次或多次,例/zo+/,则匹配,zo、zoo\zoos,则zpo不匹配 |
? | 匹配字符串一次或零次 |
. | 用于表示除换行符\n之外的任意字符 |
限定符
* | 匹配前面子表达式零次或多次 |
? | 匹配前面子表达式零次或1次 |
+ | 匹配前面字表达试1次或多次 |
{n} | n必须为一个正整数,表示用于匹配表达式n次 |
{n,} | 表示用于匹配表达式最少n次 |
{n,m} | 表示用于匹配表达式最少n次但最多m次 |
例子
/\b([a-z]+) \1\b/gi | 一个单词连续出现的位置。 |
/(\w+):\ / \ /([/:]+)(:\d*)?([# ]*)/ | 将一个URL解析为协议、域、端口及相对路径 |
/^(?:Chapter | Section) [1-9][0-9]{0,1}$/ |
/[-a-z]/ | a至z共26个字母再加一个-号。 |
/ter\b/ | 可匹配chapter,而不能匹配terminal. |
/\Bapt/ | 可匹配chapter,而不能匹配aptitude。 |
/^\s*$/ | 匹配空行。 |
/\d{2}-\d{5}/ | 验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。 |
/<\s*(\S+)(\s[^>])?>[\s\S]<\s*/\1\s*>/ | 匹配 HTML 标记。 |
用于检索数字的表达式
数字:^[0-9]*$
n位的数字:^\d{n}$
至少n位的数字:^\d{n,}$
m-n位的数字:^\d{m,n}$
零和非零开头的数字:^(0|[1-9][0-9]*)$
非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})$
正数、负数、和小数:^(-|+)?\d+(.\d+)?$
有两位小数的正实数:1+(.[0-9]{2})?$
有1~3位小数的正实数:2+(.[0-9]{1,3})?$
非零的正整数:3\d*$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]$
非零的负整数:^-[1-9][]0-9"$ 或 ^-[1-9]\d$
非负整数:^\d+$ 或 4\d*|0$
非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
用于检索字符串的表达式
汉字:5{0,}$
长度为3-20的所有字符:^.{3,20}$
由26个英文字母组成的字符串:8+$
由26个大写英文字母组成的字符串:9+$
由26个小写英文字母组成的字符串:10+$
由数字和26个英文字母组成的字符串:11+$
由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
中文、英文、数字包括下划线:12+$
中文、英文、数字但不包括下划线等符号:13+$
或 14{2,20}$
可以输入含有^%&’,;=?KaTeX parse error: Can't use function '\"' in math mode at position 1: \̲"̲等字符:[^%&',;=?\x22]+
禁止输入含有的字符:[^\x22]+
特殊需求表达式
Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$
域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.?
身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:(\d{15}$)|(^\d{18}$)|(\d{17}(\d|X|x)$)
帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):15[a-zA-Z0-9_]{4,15}$
密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):16\w{5,17}$
日期格式:^\d{4}-\d{1,2}-\d{1,2}
一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
腾讯QQ号:[1-9][0-9]{4,}
(腾讯QQ号从10000开始)
中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)