1. 定义的方法:new RegExp(‘模式字符串’,’模式匹配符’)
var box = new RegExp('Box'); //第一个参数是模式字符串
alert(box); // /Box/两个反斜扛是正则表达式的自变量表示法
var box = new RegExp('Box','ig'); //模式修饰符i:忽略大小写,g:全局查找,m:多行查找
var box = /Box/ig; //使用字面量的正则带修饰符,不加引号
2. 测量正则表达式
列表内容
test()方法:
var pattern = new RegExp('Box');
var str = 'box';
alert(pattern.test(str)); //false;test()方法返回true或false
等价于
alert(/Box/.test('Box')); //false
test()检测是否包含:
var pattern = /Box/i;
var str = 'This is a box!';
alert(pattern.test(str)); //true;
exec()方法:
var pattern = /Box/ig;
var str = 'This is a Box!';
alert(pattern.exec(str)); //返回的是数组的值,没有就返回null
3. string对象的正则表达式
match方法():
var pattern = /Box/ig;
var str = 'This is a Box!That is a Box!';
alert(str.match(pattern)); //Box,Box 返回匹配的数组
search()方法:
var pattern = /xox/i;
var str = 'This is a Box!That is a Box!';
alert(str.search(pattern)); //找到返回找到的位置,找不到返回-1
replace()方法:
var pattern = /Box/ig;
var str = 'This is a Box!That is a Box!';
alert(str.replace(pattern,'Tom')); //替换匹配到的字符串
split()方法:
var pattern = / /ig;
var str = 'This is a Box!That is a Box!';
alert(str.split(pattern)); //拆分
4.正则的静态属性和实例属性
/*静态属性,也可以使用短名*/
var pattern = /google/i;
var str = 'This is google!';
pattern.test(str); //必须执行一下这句话才有效果
alert(RegExp.input); //This is google
alert(RegExp.leftContext); //This is
alert(RegExp.rightContext); //!
alert(RegExp.lastMatch); //google
alert(RegExp.lastParen); //分组
alert(RegExp.multiline); //多行
/*实例属性*/
var pattern = /google/gi;
alert(pattern.global); //是否开启全局
alert(pattern.ignoreCase); //是否忽略大小写
alert(pattern.source); //源字符串
alert(pattern.lastIndex); //最后一次匹配的位置,也可以自己设置
5.获取控制
字符类:单个字符和数字
var pattern = /g..gle/; //.字符匹配除了换行符外的任意字符
var pattern = /go*gle/; //o*,表示0个,1个或者n个
var pattern = /go+gle/; //o+,表示一个或者多个
var pattern = /go?gle/; //o?,表示一个或者0个
var pattern = /g.?gle/; //.?,表示一个或者0个的任意字符
var pattern = /go{2,4}gle/; //o{2,4},表示匹配o2-4次包含2次和4次
var pattern = /go{3,}gle/; //o{3,},表示为3个或者3个以上
var str = 'google';
alert(pattern.test(str)); true
var pattern = /[a-z]oogle/; //[a-z]26个小写字符
var pattern = /[A-Z]oogle/; //[A-Z]26个大写字母
var pattren = /[0-9]oogle/; //[0-9]匹配数字
var pattern = /[0-9]*oogle/; //匹配任意个数字
var pattern = /[a-zA-Z0-9]oogle/; //[a-zA-Z0-9]表示匹配大小写的都能匹配
var pattern = /[^0-9]oogle/; //[^0-9]表示非0=9的任意字符
var pattern = /[a-z]+/
var str = 'google';
alert(pattern.test(str));
字符类:锚元字符匹配
var pattern = /^[0-9]oogle/; //这个^符号,是在/后面的而不是在[]里面的,false
var pattern = /^[0-9]+oogle/; //true
var str = '444oogle';
alert(pattern.test(str));
var pattern = /\woogle/; //匹配字母,数字及下划线,[a-zA-Z_]
var pattern = /\Woogle/; //表示[^a-zA-Z_];
var pattern = /\doogle/; //表示[0-9]
var pattern = /\Doogle/; //表示[^0-9]
var pattern = /^google$/; //^强制首匹配,&强制尾匹配
var str = 'google';
alert(pattern.test(str));
字符类:空白字符
var pattern = /google/;
var pattern = /goo\sgle/; //\s表示空白匹配
var pattern = /google\b/; //\b表示到达边界
var pattern = /google|baidu|bing/; //|表示匹配或选择模式
var pattern = /(google){4,8}/; //分组,可以看成一个字符
var str = 'google';
alert(pattern.test(str));
var pattern1 = /8(.*)8/; //匹配88之间的任意字符
var str1 = 'This is a 8google8';
pattern.test(str1); //匹配一下
alert(RegExp.$1); //打印匹配的字符串
var pattern = /8(.*)8/;
var str = 'This is a 8google8';
console.log(str.replace(pattern,'123')); //This is a 132
console.log(str.replace(pattern,'<strong>$1<\/strong>')); //$1表示分组获取字符串匹配到的字符串
var pattern = /(.*)\s(.*)/;
var str = 'google baidu';
alert(str.replace(pattern,'$2 $1')); //baidu和google互换位置
贪婪和惰性
var pattern = /[a-z]/;
var pattern = /[a-z]+/; //这里使用了贪婪模式,所有的字符都变成了1
var pattern = /[a-z]+?/; //使用惰性模式
var pattern = /[a-z]+?/g; //开启全局,并且使用惰性模式,每一个字母替换成1
var str = 'abcdefj';
alert(str.replace(pattern,'1'));
var pattern = /8(.*)8/; //使用了贪婪
var str = '8google8 8google8 8google8'; //匹配到了8google8 8google8 8google8
document.write(str.replace(pattern,'<strong>$1</strong>'));
var pattern = /8(.*?)8/g; //使用了惰性
var str = '8google8 8google8 8google8';
document.write(str.replace(pattern,'<strong>$1</strong>'));
exec()返回数组
var pattern = /^[a-z]+\s[0-9]{4}$/;
var str = 'google 2012';
alert(pattern.exec(str));
alert(typeof pattern.exec(str)); //object
var pattern = /^([a-z]+)\s([0-9]{4})/
var str = 'google 2012';
var a = pattern.exec(str);
alert(a.length);
alert(a[0]); //返回整个字符串
alert(a[1]); //返回字符串的第一个数值
alert(a[2]); //返回字符串第二个数值
捕获性分组
var pattern = /(\d+)([a-z]+)/; //捕获性分组,所有的分组都捕获
var str = '123abc';
var a = pattern.exec(str);
alert(a[0]);
非捕获性分组
var pattern = /(\d+)(?:[a-z])/; //非捕获性分组,只要在不需要捕获返回的分组加上?:
var str = '123abc';
alert(pattern.exec(str)); //123a,123
嵌套分组
var pattern = /(a?(b?(c?)))/;
var str = 'abc';
alert(pattern.exec(str)); //abc,abc,bc,c
前瞻性捕获
var pattern = /goo(?=gle)/; //goo后面必须是gle,才能返回
var str = 'google';
alert(pattern.exec(str)); ///返回的是goo,而不是google,这是前瞻性捕获
特殊字符匹配
var pattern = /\[/; //用反斜杠转义特殊字符,才能匹配
var str = '[';
alert(pattern.test(str));
换行模式
var pattern = /^\d+/gm; //限定了首匹配,并且开启换行模式
var str = '1.baidu\n2.google\n3.bing';
alert(str.replace(pattern,'#'));
6.常用的正则
检查邮政编码
var pattern = /[1-9][0-9]{5}/;
var str = 'This is 230000!'; //必须6位,数字,第一位不为0
alert(pattern.test(str));
检查文件压缩包
//var pattern = /(文件名)\.(扩展名)/
var pattern = /^[\w\-]+\.(zip|gz|rar)$/; //竖线的选择符必须用分组符号包含起来
var str = '2-13.zip'; //文件名:字母_数字.zip/gz/rar/7z
alert(pattern.test(str));
删除多余字母空格
var pattern = /\s/g;
var str = '111 222 333 555';
alert(str.replace(pattern,''));
删除首位空格:(3种方法)
var pattern = /^\s+/; //强制首
var str = ' goo gle ';
var result = str.replace(pattern,'');
pattern = /\s+$/; //强制尾
result = result.replace(pattern,'');
alert('|'+result+'|');
//var pattern = /^\s+(.+)\s+$/; //(.+)贪婪模式会匹配goo后面的所有字符
var pattern = /^\s+(.+?)\s+$/; //使用惰性模式
var str = ' goo gle ';
var result = pattern.exec(str)[1];
alert('|'+result+'|');
var pattern = /^\s+(.+?)\s+$/; //使用的分组模式
var str = ' goo gle ';
var result = str.replace(pattern,'$1');
alert('|'+result+'|');
简单的电子邮件验证
var pattern = /^([\w\.\-]+)@([\w\-]+)\.([a-zA-Z]{2,4})$/;
var str = '8*****553@qq.com';
alert(pattern.test(str));
如有错误,欢迎指正,我是程序小白