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