正则表达式:由元字符组成用来匹配字符串
元字符
. 表示的是:除了\n以外的任意的一个字符
[] 表示的是:范围 [0-9] 表示的是0到9之间的任意的一个数字
[a-z] 表示的是:所有的小写的字母中的任意的一个
[A-Z] 表示的是:所有的大写的字母中的任意的一个
[a-zA-Z] 表示的是:所有的字母的任意的一个
[0-9a-zA-Z] 表示的是: 所有的数字或者是字母中的一个
[.] 就是一个.
() 分组 提升优先级 [0-9]|([a-z])|[A-Z]
限定符:限定表达式出现的次数
* 表示的是:前面的表达式出现了0次到多次
[a-z][0-9]* 小写字母中的任意一个 后面是要么是没有数字的,要么是多个数字的
+ 表示的是:前面的表达式出现了1次到多次
[a-z][9]+ 小写字母一个后面最少一个9,或者多个9`在这里插入代码片`
? 表示的是:前面的表达式出现了0次到1次,最少是0次,最多1次
{0,} 表示的是前面的表达式出现了0次到多次 作用和 *一样
{1,} 表示的是前面的表达式出现了1次到多次 作用和 +一样
{0,1} 表示的是前面的表达式出现了0次到1次 作用和 ?一样
{5,10} 表示的是前面的表达式出现了5次到10次
{4} 前面的表达式出现了4次
{,10} 错误写法XXX
^ 表示的是以什么开始,或者是取非(取反) ^[0-9] 以数字开头 ^[a-z] 以小写字母开始
[^0-9] 取反,非数字 [^a-z] 非小写字母
$ 表示的是以什么结束 [0-9][a-z]$ 必须以小写字母结束
\d 数字中的任意一个 \D 非数字中的一个
\s 空白符中的一个 \S 非空白符
\w 非特殊符号(字母 数字或下划线) \W 特殊符号
\b 单词的边界
正则表达式练习
身份证的正则表达式 15位或者18位
([1-9][0-9]{14})([0-9]{2}[0-9xX])?
([1-9][0-9]{14})|([1-9][0-9]{16}[0-9xX])
邮箱的正则表达式 sd2113_3.-fd@itcast.com.cn
[0-9a-zA-Z_.-]+[@][0-9a-zA-Z_.-]+([.][a-zA-Z]+){1,2}
座机号码的正则表达式 010-19876754
[0-9]{3,4}[-][0-9]{8}
\d{3,4}[-]\d{8}
创建正则表达式对象
1.通过构造函数创建对象
var reg=new RegExp(/\d{5}/); //创建对象
var flag=reg.test("我的电话是10086"); //使用test方法测试
console.log(flag);
2.字面量的方式创建对象
var reg=/\d{1,5}/;
var flag=reg.test("小苏的幸运数字:888");
console.log(flag);
全局模式和忽略大小写
g 全局模式匹配
i 忽略大小写
字符串match方法匹配
var str="中国移动:10086,中国联通:10010,中国电信:10000";
//把里面所有的数字全部显示出来
var array=str.match(/\d{5}/g);
console.log(array); //(3) ["10086", "10010", "10000"]
var str = "123123@xx.com,fangfang@valuedopinions.cn 286669312@qq.com 2、emailenglish@emailenglish.englishtown.com 286669312@qq.com...";
var array = str.match(/\w+@\w+\.\w+(\.\w+)?/g);
console.log(array);
//["123123@xx.com", "fangfang@valuedopinions.cn", "286669312@qq.com", "emailenglish@emailenglish.englishtown.com", "286669312@qq.com"]
//提取某个日期中的日
var time = '2019-08-28'
var array = time.match(/(\d{4})[-](\d{2})[-](\d{2})/) //加括号 将匹配到的字符串分组
console.log(RegExp.$3) //28
//提取邮箱中的用户名部分
var email="shuaiyangtaishuaile@itcast.com.cn";
//邮箱的正则表达式
email.match(/([0-9a-zA-Z.-_]+)[@]([0-9a-zA-Z-_]+)(([.][a-zA-Z]+){1,2})/)
console.log(RegExp.$1)//用户名 shuaiyangtaishuaile
console.log(RegExp.$2)//邮箱名 itcast
console.log(RegExp.$3)//域名 .com.cn
字符串replace方法替换
replace方法接收两个参数,第一个参数是原字符串中要被替换的,可以是字符串(只能替换一个)或者正则表达式(指定全局匹配g可以替换所有),第二个参数是要替换成的。
var str="小苏好帅哦,真的是太帅了,帅,就是真帅";
str=str.replace(/帅/g,"猥琐");
console.log(str); //小苏好猥琐哦,真的是太猥琐了,猥琐,就是真猥琐
字符串删除首尾两端空格trim
trim只能删除首尾两端的空格,但是不能删除字符串中间的空格
var str=" 哦买噶的 ,太幸福了 ";
str=str.trim();
console.log("==="+str+"===");//===哦买噶的 ,太幸福了===
删除首尾两端和字符串中间的所有空格
var str = " 哦买噶的 ,太幸福了 ";
str = str.replace(/\s+/g, "");
console.log("===" + str + "===");//===哦买噶的,太幸福了===
exec方法匹配字符串
exec方法接收一个参数:要进行匹配的字符串
在设置全局匹配的情况下,exec方法每次也只能返回一个匹配项。多次调用该方法,每次exec都会在字符串中继续查找匹配项,并返回一个数组,直到找不到匹配项返回null。
如果不设置全局匹配,多次调用该方法也只能返回该字符串中第一个匹配项。
返回的数组中,第一个是字符串中的匹配信息。
var str = "中国移动:10086,中国联通:10010,中国电信:10000";
var reg = /\d{5}/g;
var array = reg.exec(str);
while(array != null){
console.log(array)
console.log(array[0])
array = reg.exec(str) //继续匹配
}