一. JavaScript中定义正则的两种方式:
a) 使用正则字面量:i. var reg = /表达式/模式修饰符
b) 使用RegExp构造函数:
i. var reg = RegExp(“表达式”,”模式修饰符”)
//1、使用正则字面量定义,var reg = /表达式/模式修饰符
var aArr='abcaabbccaaabbbcc';
// var reg=/a/g;
//2、使用RegExp构造函数,var reg = RegExp(“表达式”,”模式修饰符”)
var reg=new RegExp('abc','g')
console.log(aArr.match(reg));
二. 支持正则的方法:
a) Match:找到与正则相匹配的字符并且存入数组,返回数组。i. 练习:挑选出abcaabbccaaabbbcc中的所有a
i. 练习:使用*代替这段文字中的“这个人好像一个逗逼,那个人好像一个傻逼”的’逼’字。
c) Search:搜索与正则相匹配的字符的开始下标,返回该下标。i. 练习:挑选出aabbccddaabbccdd中的cc首次出现的位置
d) Test:判断字符串是否符合正则,返回true或者false。i. 练习:判断abcdefg中是否含有def
e) Split:用符合正则的字符将字符串切割并存入数组,返回数组。i. 练习:用逗号将字符串abc,aabbccdd,aaabbbcccddd切割成数组
//全局匹配g
var sStr='abcaabbccaaabbbcc';
var reg=/a/g;
//1、Match:找到与正则相匹配的字符并且存入数组,返回数组
console.log(sStr.match(reg));//输出Array(6)
//2、Replace:用指定字符替换符合正则的字符,返回替换后的字符串
//违反字的过滤
var sStr1='这个人好像一个逗逼,那个人好像一个傻逼';
console.log(sStr1.replace(/逼/g,'*'));
//3、Search:搜索与正则相匹配的字符的开始下标,返回该下标
var sStr2='aabbccddaabbccdd';
var reg1=/cc/g;
console.log(sStr2.search(reg1));
//4.Test:判断字符串是否符合正则,返回true或者false。
var sStr3='abcdefg';
var reg2=/def/g;
console.log(reg2.test(sStr3));
//4、Split:用符合正则的字符将字符串切割并存入数组,返回数组
var sStr4='abc,aabbccdd,aaabbbcccddd';
var reg3=/,/g;
console.log(sStr4.split(reg3));
三.
模式修饰符:
a) 全局匹配g
i. 练习:将abcdefgabcdefgabcdefg中所有的cde帅选出来
b) 不区分大小写i
i. 练习:将abcdefgABCdefgABCdefg中所有的abc或者ABC帅选出来
c) 多行匹配m
i. 练习:判断此字符的第二行是否以aa开头bcdefg\naabbccdd
var str='abcdefgabcdefgabcdefg';
//普通匹配
console.log(str.match(/cde/));//一个cde
//1、全局匹配g
console.log(str.match(/cde/g));//三个cde
//2、不区分大小写i
var str2='abcdefgABCdefgABCdefg';
console.log(str2.match(/abc/gi));
//3、多行匹配m
var str3='bcdefg\naabbccdd';
var reg=/^aa/gm;
console.log(str3);
//test方法是用来判断字符串是否符合正则,返回true或者false
console.log(reg.test(str3));
四.
匹配普通字符:
a) /普通字符/
b) 以上例子都是匹配普通字符
五. 匹配方括号:
a) /[a-z]/g:i. 匹配小写字母
ii. 练习:提取“Aa1_Bb2$Cc3*Dd4&”中的小写字母
b) /[A-Z]/g:i. 匹配大写字母
ii. 练习:提取“Aa1_Bb2$Cc3*Dd4&”中的小写字母
c) /[0-9]/:
i. 匹配数字
ii. 练习:提取“Aa1_Bb2$Cc3*Dd4&”中的数字
d) [a-zA-Z0-9_]
i. 匹配合法字符
ii. 判断用户名“Aa1_Bb2$Cc3*Dd4&”是否只包含合法字符(大小写字母数字和下划线)。
e) [^a-zA-Z0-9_]
i. 匹配非法字符(除了大小写字母数字和下划线以外的字符)
ii. 去掉用户名“Aa1_Bb2$Cc3*Dd4&”中的非法字符
f) /[\u4e00-\u9fa5]/g;
i. 匹配中文
ii. 提取”Aa1我_Bb2$你Cc3*Dd4他&”
/匹配方括号
var str='Aa1_Bb2$Cc3*Dd4&';
var str1='Aa1_Bb2Cc3Dd4';
console.log(str.match(/[a-z]/g));//匹配小写字母
console.log(str.match(/[aAbB]/g));//匹配括号中的每一个字符
console.log(str.match(/[A-Z]/g));//匹配大写字母
console.log(str.match(/[0-9]/g));//匹配0-9的数字
var reg=/[a-zA-Z0-9_]/g;
var reg1=/[^a-zA-Z0-9_]/g;
console.log(str.match(reg));//匹配合法字符
console.log(str.match(reg1));//匹配非法字符
console.log(str1.match(reg1));//如匹配不到非法字符就返回null
//判断用户名“Aa1_Bb2$Cc3*Dd4&”是否只包含合法字符(大小写字母数字和下划线)。
//包含非法字符为true,说明该串字符中含有非法字符,应该输出false所以要取反
console.log(!reg1.test(str1));//输出false
//ii.去掉用户名“Aa1_Bb2$Cc3*Dd4&”中的非法字符
console.log(str.replace(reg1,''));
var str2='Aa1我_Bb2$你Cc3*Dd4他&';
reg2=/[\u4e00-\u9fa5]/g;
console.log(str2.match(reg2));//i. 匹配中文
六.
匹配元字符:
a) .:匹配任意字符
b) \d:匹配数字
i. 相当于[0-9]
ii. 练习:提取下列字符串中的电话号码:”我们的热线电话:020-888666999,欢迎拨打。”
c) \D:匹配非数字
i. 相当于[^0-9]
ii. 练习:提取”Aa1_Bb2$Cc3*Dd4&”的非数字
d) \w:匹配合法字符(大小写字母、数字、下划线)
i. 相当于[a-zA-Z0-9_]
ii. 练习:提取”Aa1_Bb2$Cc3*Dd4&”中的合法字符
e) \W:匹配非法字符(除了大小写字母、数字、下划线的其他字符)
i. 相当于[^a-zA-Z0-9_]
ii. 练习:提取”Aa1_Bb2$Cc3*Dd4&”中的非法字符
f) \s:匹配空白字符(包括空格、制表符、换行符)
i. 练习:去掉用户名” Aa1_B b2\t$Cc3*\nDd4&”中的所有的空白字符。
g) \S:匹配非空字符
i. 练习:提取” Aa1_B b2\t$Cc3*\nDd4&”中的非空字符
var str='abcdefgabcdefgabcdefg';
var str2='Aa1_Bb2$Cc3*Dd4&';
//a).:匹配任意字符
console.log(str.match(/./g));
//b)\d:匹配数字(相当于[^0-9]),提取下列字符串中的电话号码
var str1='020-888666999,欢迎拨打';
//匹配出来后将字符拼接起来,并用空字符隔开
console.log(str1.match(/\d/g).join(''));
//c)\D:匹配非数字(相当于[^0-9]),提取非数字
console.log(str1.match(/\D/g));
//d)\w:匹配合法字符(大小写字母、数字、下划线)(相当于[a-zA-Z0-9_])
console.log(str2.match(/\w/g));
//e)\W:匹配非法字符(除了大小写字母、数字、下划线的其他字符)(相当于[^a-zA-Z0-9_])
console.log(str2.match(/\W/g));
//f)\s:匹配空白字符(包括空格、制表符、换行符)
//去掉用户名” Aa1_B b2\t$Cc3*\nDd4&”中的所有的空白字符。
var str3='Aa1_B b2\t$Cc3*\nDd4&';
var reg=/\s/g;
console.log(str3.replace(reg,''));
//g)\S:匹配非空字符
console.log(str3.match(/\S/g).join(''));
七.
匹配量词:
a) ?
i. 匹配0个或者1个
ii. 相当于:{0,1}
iii. 练习:提取:abcaabbccaaabbbccc中所有的a
b) *
i. 匹配0个或者任意多个
ii. 相当于:{0,}
iii. 练习:提取:abcaabbccaaabbbccc中a,aa,aaa
c) +
i. 匹配1个或者任意多个
ii. 相当于:{1,}至少匹配一个到无限个
iii. 练习:提取:abcaabbccaaabbbccc中a,aa,aaa
d) {n}
i. 正好匹配n个
ii. 练习:判断’123456’中是否正好是6位整数
e) {n,m}
i. 匹配n到m个
ii. 练习; 提取:abcaabbccaaabbbccc中aa,aaa
//七. 匹配量词
//a)?,匹配0个或者1个,相当于:{0,1}
var str='abcaabbccaaabbbccc';
//提取:abcaabbccaaabbbccc中所有的a,不是a的用空字符来代替
console.log(str.match(/a?/g));
//(19) ["a", "", "", "a", "a", "", "", "", "", "a", "a", "a", "", "", "", "", "", "", ""]
//b)*,匹配0个或者任意多个,{0,},与?的区别是*可以连续匹配
//提取:abcaabbccaaabbbccc中a,aa,aaa
console.log(str.match(/a*/g));
//(16) ["a", "", "", "aa", "", "", "", "", "aaa", "", "", "", "", "", "", ""]
//c)+,匹配1个或者任意多个,相当于:{1,}
//提取:abcaabbccaaabbbccc中a,aa,aaa
console.log(str.match(/a+/g));
//(3) ["a", "aa", "aaa"]
//d){n},正好匹配n个
var str1='123456';
///^\d{6}$S/g--表示以数字开头数字结尾,且结尾刚好是在第六个整数处
console.log(/^\d{6}$/g.test(str1));//true
//e){n,m},匹配n到m个
//提取:abcaabbccaaabbbccc中aa,aaa
console.log(str.match(/a{2,3}/g));
//(2) ["aa", "aaa"]
八.
定位匹配:
a) ^
i. 匹配行首
1. 行首字符必须是字母:/^[a-z]/i
ii. 练习:判断用户名’a476572766’是否以字母开头
//a)^,匹配行首
//判断用户名’a476572766’是否以字母开头
var str='Assa476572766';
console.log(/^[a-z]/i.test(str));//true
b)
$
i. 匹配行尾
1. /com$/
ii. 练习1:判断域名”www.baidu.com”是否以com结尾
iii. 练习2:判断QQ号格式是否正确
1. 判断规则:
a) 第一位字符必须是1-9中的任意字符
b) 其他字符必须是0-9中的任意字符
c) QQ号位数限定为5-11位
//b)$,匹配行尾
//判断域名”www.baidu.com”是否以com结尾
var str1='www.baidu.com';
var reg=/com$/g;
console.log(reg.test(str1));//true
//判断QQ号格式是否正确
var str3='43442422';
//开头必须是1-9的数字,其他为0-9的数字,且只能为5-11位
var reg1=/^[1-9]\d{4,10}$/g;
console.log(reg1.test(str3));
c)
\b
i. 匹配单词边界:
1. JavaScript中单词:大小写字母、数字、下划线_
2. 边界:边界的左边是单词,右边是非单词,所以边界不是一个字符,而是一个位置
ii. 练习:
1. 提取'aaa$123*____@'字符串中的位于单词边界的左右字符
a) /.\b./g
2. 去掉“we were we weex weae”中的单词we
a) /\bwe\b/g
//c) \b匹配单词边界:
//边界:边界的左边是单词,右边是非单词,所以边界不是一个字符,而是一个位置
//JavaScript中单词:大小写字母、数字、下划线_
var str4='aaa$123*____@';
//字符边界的左右可以为任意字符,.代表匹配任意字符
var reg2=/.\b./g;
//1.提取'aaa$123*____@'字符串中的位于单词边界的左右字符
console.log(str4.match(reg2));//(3) ["a$", "3*", "_@"]
//2、去掉“we were we weex weae”中的单词we
var str5='we were we weex weae we';
console.log(str5.match(/we\b/g));//(2) ["we", "we"];
d)
\B:非单词边界
i. 提取” We are ware hare_sare”中含有are且与非单词边界相邻的单词
ii. 提取” We are ware hare_sare”中含有are且与单词边界相邻的单词
//d)\B:非单词边界,
var str6='We are sware hare_sare';
//i. 提取” We are ware hare_sare”中含有are且与非单词边界相邻的单词
console.log(str6.match(/\Bare/g));//(3) ["are", "are", "are"]
//ii. 提取” We are ware hare_sare”中含有are且与单词边界相邻的单词
console.log(str6.match(/\bare/g))//["are"];
e)
():括号模式
i. 括号中的正则当做整体来匹配,符合括号中正则的字符会被单独返回
1. 练习:提取"¥99.8 $15.6945"中$15.6945
f) X(?:y)
i. 判断x后面匹配的是否是y
ii. 匹配成功返回源字符串,否则返回null
iii. 判断'javascript2015'中Javascript后接的是不是2015
iv. /javascript(?:2015)/g
g) X(?=y)
i. 判断x后面匹配的是否是y
ii. 匹配成功返回x,否则返回null
iii. 判断'javascript2015'中Javascript后接的是不是2015
iv. /javascript(?=2015)/g
h) X(?!y)
i. 判断x后面匹配的是否不是y
ii. 匹配成功返回x,否则返回null
iii. 判断'javascript2015'中Javascript后接的是否不是2015
iv. /javascript(?!2015)/
i)
j) X|y|z:或模式
i. 匹配x,y,z中的任意一个表达式,符合其中任意一个返回true
ii. 练习:判断身份证格式是否正确
iii. 身份证判断规则:
1. 十五位纯数字:/^\d{15}$/g
2. 18位纯数字:/^\d{18}$/g
3. 17位纯数字加大写X或者小写x :/^\d{17}(x|X)$/g
判断QQ号格式:
var qq = '476572766';
var reg = /^[1-9]\d{4,10}$/g
console.log( reg.test(qq) );
判断身份证格式:
var str1 = '123456789123456';
var str2 = '123456789123456789';
var str3 = '12345678912345678X';
var str4 = '12345678912345678X';
var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(x|X)$)/g
console.log( reg.test(str1) );
console.log( reg.test(str2) );
console.log( reg.test(str3) );
console.log( reg.test(str4) );
//e)():括号模式
//提取"¥99.8 $15.6945"中$15.6945
var str7='¥99.8 $15.6945';
console.log(str7.match(/\$(\d+\.\d+)/));//$15.6945
//g)X(?=y),判断x后面匹配的是否是y,匹配成功返回源字符串,否则返回null
//iii. 判断'javascript2015'中Javascript后接的是不是2015
var str8='javascript2015';
console.log(str8.match(/javascript(?=2015)/g));//["javascript"]返回X
//g)X(?=y),i. 判断x后面匹配的是否是y,ii. 匹配成功返回x,否则返回null
console.log(str8.match(/javascript(?:2015)/g));//["javascript2015"]
console.log(/javascript(?:2015)/g.test(str8));//true
//h)X(?!y)i.判断x后面匹配的是否不是y,ii.匹配成功返回x,否则返回null
console.log(/javascript(?!2015)/g.test(str8));//false
//j)X|y|z:或模式,i.匹配x,y,z中的任意一个表达式,符合其中任意一个返回true
//判断身份证格式是否正确
var sStr='431128199787290';
var rReg=/(^\d{15}$)|(^\d{18}$)|(^\d{17}(x|X)$)/;
console.log(rReg.test(sStr));
验证手机号码格式:
var str = '18674578536';
var reg = /^[1][3,5,8]\d{9}$/g;
console.log( reg.test(str) );
验证邮箱格式:
var str = '[email protected]';
var reg = /^\w+@[a-z0-9]+\.[a-z]{2,3}$/gi;
console.log( reg.test(str) );
判断QQ号格式:
var qq = '476572766';
var reg = /^[1-9]\d{4,10}$/g
console.log( reg.test(qq) );
判断身份证格式:
var str1 = '123456789123456';
var str2 = '123456789123456789';
var str3 = '12345678912345678X';
var str4 = '12345678912345678X';
var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(x|X)$)/g
console.log( reg.test(str1) );
console.log( reg.test(str2) );
console.log( reg.test(str3) );
console.log( reg.test(str4) );