1. 什么是正则表达式
正则表达式:也被称为规则表达式,它是由一些普通字符和特殊字符(也称为元字符)构成的表达式。它的作用是用来验证字符串是否符合格式要求,或者判断字符串中是否包含指定格式的子串。
2. 正则表达式的创建
- 字面量形式创建正则表达式:
var 正则表达式名称 = /表达式内容/修饰符
- 利用构造方法创建正则表达式:
var 正则表达式名称 = new RegExp('表达式内容', '修饰符');
/*创建正则表达式*/
// 字面量法
var reg=/a/;
console.log(reg);
// 构造法
var reg=new RegExp("a");
console.log(reg);
3. 正则表达式的构成
正则表达式的构成:普通字符、特殊字符
- 普通字符:字母、数字、_(下划线)等
- 特殊字符(元字符):
1) 定位符
^:表示以某个字符开头
$:表示以某个字符结尾
注意:
加上^$表示把整个字符串当成一个整体,字符串是确定的,可以匹配一次
不加^$表示整个字符串不确定,可以匹配多次
如"^abc$"只能匹配abc;"abc"不仅可以匹配abc,还可以匹配abcd
2) 数量
*:表示它前面的字符的个数为0到无穷多个
+:表示它前面的字符的个数为1到无穷多个
?:表示它前面的字符的个数为0到1个
{n}:表示它前面的字符的个数有且只能有n个
{n,m}:表示它前面的字符的个数为n-m个,包含n和m
{n,}:表示它前面的字符的个数为大于等于n个
3) 转义字符:
1. 在普通字符前面加反斜线,使它具有特定的功能和含义;如\d表示任意一个数字
2. 在具有特定的功能和含义的字符前面加反斜线,将它转换为普通字符;如\/表示将正则表达式中的斜线转换为普通的斜线
\d:表示所有的数字,即0-9间的任意一个数字
\D:表示一个非数字的字符
\w:表示任意的一个字母、数字、下划线
\W:表示除了字母、数字、下划线之外的任意一个字符
\s:表示任意一个空白符,如空格
\S:表示除了空白符的任意字符
4) 备选字符集
[选项1选项2选项3]:表示字符串中只要匹配该备选字符集中的任意一个即可
[选项1-选项n]:表示选项1到选项n间的任意一个字符
[^选项1选项2选项3]:除了选项1选项2选项3之外的任意字符
5)分组和选择
():表示分组
|:表示或的意思
6)其它
.:点表示除了\n之外的任意字符
[\u4e00-\u9fa5]:表示任意的一个汉字
\b:匹配单词的边界,注意:所谓单词就是指字母、数字、下划线形成的连续字符
\B:匹配单词的非边界
<body>
<script>
/*正则表达式的练习*/
// 1.邮政编码:由6个数字构成,第一位不可以是0
var reg1=/^[1-9]\d{5}$/;
var str1_1='512345'; //true
var str1_2='012345'; //false
// 2.手机号码:由13/15/17/18开头的11位数字
var reg2=/^1[3578]\d{9}$/;
var str2='13801026582457';
console.log(reg2.test(str2));
// 3.QQ号:第一位不可以是0,位数在5-12位的数字构成
var reg3=/^[1-9]\d{4,11}$/;
var str3="123442345678";
console.log(reg3.test(str3));
// 4.检查是否是压缩文件:文件名由字母、数字、下划线构成,不可以以数字开头,后缀为.zip/rar/gz
var reg4=/^[a-zA-Z_]\w*\.(zip|rar|gz)$/;
var str4="tdcwyedgb.zip";
console.log(reg4.test(str4));
// 5.密码:字母、数字、下划线构成,6-20位
var reg5=/^\w{6,20}&/;
// 6.用户名:字母、数字、下划线构成,6-16位,不能以数字开头
var reg6=/^[a-zA-Z_]\w{5,15}$/;
// 7.输入年龄:只能在18-40间
var reg7=/^1[89]$|^[23][1-9]$|^40$/;
var str7="43";
console.log(reg7.test(str7));
// 8.身份证号码:15或18位,如果是15位则全部为数字,如果是18位,前17位为数字,第18位为数字或字母x,字母不区分大小写
var reg8=/^\d{15}$|^\d{17}[1-9x]$/i;
//var reg = /^\d{15}$|^\d{17}[\dxX]$/;
var str8="123456700987654Z";
console.log(reg8.test(str8));
// 9.中文名字:三个汉字、中间必须是小或晓【[\u4e00-\u9fa5]表示任意一个汉字】
var reg9=/^[\u4e00-\u9fa5][小晓][\u4e00-\u9fa5]$/;
var str9="没过";
console.log(reg9.test(str9));
//10. 正则表达式中^$加与不加的区别
var reg=/^\w{6,20}$/;
var str="20dwer2313456789097669dfghfd";
console.log(reg.exec(str)); //null
var reg=/\w{6,20}/;
var str="20dwer2313456789097669dfghfd";
console.log(reg.exec(str)); //Array [ "20dwer23134567890976" ]
</script>
</body>
4. 正则表达式中的修饰符
正则表达式中的修饰符
i:忽略大小写
g:全局匹配
ig:既忽略大小写,也全局匹配
5. 正则表达式中的方法
5. 1. test方法
1)作用:该方法的作用是用来判断字符串是否符合正则表达式的格式要求,如果符合格式要求,返回true、否则返回false
2)格式:正则表达式.test(字符串);
var reg=/^\w{6,20}$/;
var str="20dwer2313456789097669dfghfd";
console.log(reg.test(str)); //false
5. 2. exec方法
1)作用:该方法时正则表达式对象的一个方法,可以利用这个方法在字符串中检索是否有和该正则表达式匹配的子串,如果有,则返回匹配的子串,有点类似于match方法
2)格式:正则表达式.exec(字符串);
var reg=/\w{6,20}/;
var str="20dwer2313456789097669dfghfd";
console.log(reg.exec(str)); //Array [ "20dwer23134567890976" ]
5. 3. 与字符串对象相结合的方法
- split方法:
作用:将字符串str转换为数组
格式:字符串.split(分隔符的正则表达式);
- match方法
1.作用:从字符串中查找匹配的子串
2.格式:字符串.match('要找的子串'/正则表达式);
- replace方法
1.作用:替换字符串中的指定字符
2.格式:字符串.replace('要被替换的字符', '新的字符');
- search方法
1.作用:在字符串中查找某个子串,类似于indexOf、(indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。)
2.格式:字符串对象.search('子串');
3.注意:search方法当找到第一个匹配的子串后就停止匹配,全局匹配(g)不起作用
// 将字符串str转换为数组,以数字作为分隔符
var str = 'he1ll2owo3rl4d';
var arr = str.split(/\d/);
console.log(arr); //Array(5) [ "he", "ll", "owo", "rl", "d" ]
//输出字符串中的所有l
var str = 'helloworld';
var reg = /l/g; //g是正则表达式的一个修饰符,表示全局匹配
var res = str.match(reg);
console.log(res); //Array(3) [ "l", "l", "l" ]
//将字符串中的数字替换成a
var str = 'he1llo2wor3ld';
var reg = /\d/g;
var res = str.replace(reg, 'a');
console.log(res); //healloaworald
//寻找第一个o的下标
var str = 'helloworld';
var reg = /o/g;
var res = str.search(reg);
console.log(res); //4;找到即返回
6. 贪婪模式与懒惰模式
贪婪模式:如果正则表达式中有表示数量的特殊符号,如*、+、{n,m}等,在匹配时会尽可能多的匹配字符,默认模式
懒惰模式:如果正则表达式中有表示数量的特殊符号,如*、+、{n,m}等,在匹配时会尽可能少的匹配字符。如果要将贪婪模式改为懒惰模式只需要在数量词后面加?
//贪婪模式
var str = 'antzone';
var reg = /a.*/;
var res = str.match(reg);
console.log(res); //Array [ "antzone" ]
//懒惰模式
var str = 'antzone';
var reg = /a.*?/;
var res = str.match(reg);
console.log(res); //Array [ "a" ]