正则表达式小结篇
正则表达式就是由普通字符(例如字符a到z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
下面小编给大家总结了些关于正则表达式知识点,具体内容如下所示:
1、元字符
[拥有特殊含义的元字符]
\d->匹配一个0-9的数字,相当于[0-9],和它相反的是\D->匹配一个除了0-9的任意字符
\w->匹配一个0-9、a-z、A-Z、_的数字或字符,相当于[0-9a-zA-Z_]
\s->匹配一个空白字符(空格、制表符...)
\b->匹配一个单词的边界
\t->匹配一个制表符
\n->匹配一个换行
.->匹配一个除了\n以外的任意字符
^->以某一个元字符开头
$->以某一个元字符结尾
\->转移字符
x|y->x或者y的一个
[xyz]->x、y、z中的任意一个
[^xyz]->除了xyz中的任意一个字符
[a-z]->匹配a-z中的任意一个字符
[^a-z]->匹配除了a-z中的任意一个字符
()->正则中的分组
注意:
1)关于[]
a、[+]->中括号中出现的所有字符都代表的是本身的意思
b、[12-65]->这个不是12-65而是1/2-6/5三者中的一个
2)关于()
a、分组的作用是改变默认的优先级,例如:/^18|19$/,181、189、119、819、1819...都符合,而不是我们认为的18或19,但是改成/^(18|19)$/就是单纯的18或19了
b、可以在捕获大正则匹配的内容同时,把分组匹配的内容也进行捕获->分组捕获
c、分组引用,例如:/^(\d)(\w)\2\1$/,这里的\2是和第二个分组出现一模样的内容,\1是和第一个分组出现一模一样的内容,例如:"0aa0"就符合了
[代表数量的量词元字符]
*->0到多个
+->1到多个
?->0到1个
{n}->出现n次
{n,}->出现n到多次
{n,m}->出现n到m次
注意:
1)关于?的几种情况
a、放在非量词元字符后面,代表出现0-1次
b、放在量词元字符后面,代表取消捕获时候的贪婪性,例如:reg=/\d+/;reg.exec("2015")->"2015"但是如果正则这样写reg=/\d+?/;reg.exec("2015")->"2"
c、在分组开头加?:,代表当前的分组只是匹配不进行捕获,例如:/^(?:\d+)$/
d、在分组开头加?=,正向预查,例如:/^abcdef(?=1|2)$/只有"abcdef1"和"abcdef2"才符合
e、在分组开头加?!,负向预查,例如:/^abcdef(?!1|2)$/除了"abcdef1"和"abcdef2"不符合,其他的只要是"abcdef(任何的东西)"都符合
[代表本身意思的元字符]
除了以上的,在字面量方式中,我们出现的其他任意字符代表的都是自己本身的意思
varnum=12;
varreg=/^\w"+num+"$/;->这里"+num+"不是把变量的值拼接,而这里的不管是"还是+都是元字符
->对于需要拼接字符串和变量的方式我们只能使用实例方式创建正则
2、修饰符
i->ignoreCase忽略字母的大小写
g->global全局匹配(加上g可以解决正则捕获时候的懒惰性)
m->multiline多行匹配
3、项目中常用的正则
1)有效数字的
varreg=/^[+-]?(\d|([1-9]\d+))(\.\d+)?$/;
2)邮箱的
varreg=/^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
3)电话的
varreg=/^1\d{10}$/;
4)年龄在18-65之间的
varreg=/^((18|19)|([2-5]\d)|(6[0-5]))$/;
5)中文姓名
varreg=/^[\u4e00-\u9fa5]{2,4}$/;
6)身份证
varreg=/^(\d{6})(\d{4})(\d{2})(\d{2})(?:\d{2})(\d)(?:\d|X)$/; //->12828(省市县)1990(年)12(月)04(日)061(奇数是男偶数是女)7(数字或者X)
4、正则的匹配
reg.test([string])->true就是匹配成功 false->匹配不成功
5、正则的捕获
1)reg.exec([string])
->首先去匹配,匹配成功在捕获,返回的是一个数组;如果匹配不成功返回的是null;
->正则的捕获即懒惰又贪婪
->解决懒惰性在正则的末尾增加全局修饰符g
->解决贪婪性在量词后面加?
以上所述是小编给大家介绍的正则表达式小结篇,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!