正则表达式限定符
表达式 * : 表示前面一个表达式出现0次或多次,等价于 {0,}
表达式 + : 表示前面一个表达式出现1次或者多次,等价于 {1,}
表达式 ? : 表示前面一个表达式出现0次或1次,等价于 {0,1}
表达式{n}: n是一个正整数,表示前面的表达式出现了n次。
表达式{n,m}: n 和 m 都是整数。表示前面的表达式至少出现n次,最多出现m次。
正则表达式元字符
" . ": 表示任意一个除了\n以外的字符
" | ": 表示或者,[0-9]|[a-z],表示一个数字或者一个小写字母
" ^ ": 表示以什么开始, ^ [0-9],表示以数字开始
" $ ": 表示以什么结束, ^ [0-9],表示以数字开始
" ( ) ": 表示分组,或者提升优先级
" [ ^ ] " : 表示取非,除了该字符集合。
" [ ] ": 表示任意单个字符,包括转义字符和特殊字符。可以使用破折号(-)来指定一个字符范围。
例如:
[ 0-9]: 表示0到9之间的任意一个数字
[a-z]: 表示任意一个1小写字母
[A-Z]: 表示任意一个大写字母
[a-zA-Z: 表示任意一个字母
[0-9a-zA-Z]: 表示任意一个字母或数字
1.严格模式
/ ^ [0-9][a-z] $ /,表示任意一个数字和任意一个小写字母
2.非严格模式
/ [0-9][a-z]/,表示只要有一个数字和一个字母就可以了
简写方式
\d: 代表数字,等价于[0-9]
\D: 代表非数字
\s: 空白符
\S: 非空白符
\w: 代表非特殊符号,等价于[a-zA-Z0-9_]
\W: 代表特殊符号
正则匹配字符串的方法:
1、创建对象
var reg=new RegExp(/匹配的模式/)
//调用方法验证字符串是否匹配
reg.test("字符串"); //返回布尔值
2、字面量的方式
var reg=/\d{1,5}/; //匹配的模式
reg.test("字符串"); //返回布尔值
例1:正则表达式匹配中文名字:
/^ [\u4e00-\u9fa5]$/
1、把中文格式变成编码格式
escape("中文字符串")
2、把编码格式变成中文格式
unescape("编码格式字符串")
例2:正则表达式匹配邮箱::
/^ [0-9a-zA-Z_.-]+[@][0-9a-zA-Z_.-]+([.][a-zA-Z]+){1,2}$/
例3:判断输入的密码的级别
1级(弱):有数字、字母、特殊符号中的任意一个
2级(中):有数字、字母、特殊符号中的任意两个
3级(强):数字、字母、特殊符号都有
function getLvl(pwd){
var lvl=0;
//判断是否有数字
if(/[0-9]/.test(pwd)){
lvl++;
}
//判断是否有字母
if(/[a-z][A-Z]/.test(pwd)){
lvl++;
}
//判断是否有特殊符号
if(/[^0-9][a-z][A-Z]_/.test(pwd)){
lvl++;
}
return lvl;
}
正则表达式中,g 表示全局模式匹配
正则表达式中,i 表示忽略大小写
例:把字符串中所有匹配的数字取出来
var str="中国移动:10086,中国联通:10010,中国电信10000";
var array=str.match(/\d{5}/g);
console.log(array);
/*
var reg=/\d{5}/g;
var result=reg.exec(str);
while(result!=null){
console.log(result[0]);
result=reg.exec(str);
}
*/
例:把字符串中所有匹配的邮箱取出来
var str="123@qq.com,fangfang@value.cn,28wer@xx.com,email@email.english.com..."
var array=str.match(/\w+@\w+\.\w+(\.\w+)?/g);
console.log(array);
分组提取
例:提取日期中的月的部分
var dataStr="2019-01-15"
var arrey=dataStr.match(/(\d{4})-(\d{1,2})-(\d{1,2})/)
if(arrey){
console.log(RegExp.$2)
}