js正则表达式总结

正则表达式 
var box =new RegExp('box'); //第一个参数是模式字符串 必传
alert(box);

var box =new RegExp('Box','gi');//第二个参数可选 模式修饰符  i:忽略大小写 g:全局匹配 m:多行匹配
alert(box);

var box =/BOX/;//使用字面量正则,带修饰符
alert(box);

测试正则  
test()在字符串中测试模式匹配 返回true或false 
exec()在字符串中执行匹配搜索 成功则返回包含该查找字符串的相关信息数组 否则返回null

var pattern= new RegExp('Box');//模式
var str='box';//匹配的字符串
alert(pattern.test(str));//false

alert(/Box/.test('box'));

var pattern=/Box/;
var str='box';
alert(pattern.test(str));


var str1='box';
var str2='Box';
alert(str1==str2);

var pattern=/Box/i;
var str='This is a Box!';
alert(pattern.test(str));//字符串中是否包含模式中的正则

var pattern=/Box/i;
var str='ox';
alert(pattern.exec(str));//返回的是数组 有就返回数组的值 没有就返回nnull

var pattern=/Box/ig; //开启了全局
var str='This is a Box!This is a Box';//将所有匹配的字符串组合成数组返回
alert(typeof str.match(pattern));
var a=str.match(pattern);
alert(a[1]+a[0]);

var pattern=/Box/;
var str='This is a Box!This is a Box!';
alert(str.search(pattern));

var pattern =/Box/ig;
var str='This is a Box!This is a Box!';	
alert(str.replace(pattern, 'string'))

var pattern =/i/ig;
var str='This is a Box!This is a Box!';	
alert(str.split(pattern));
alert(str.split(pattern).length); //把字符串分割为字符串数组

var pattern=/google/ig;
var str='This is a google google!';
// pattern.test(str);//必须执行一下 静态属性才有效
var a =pattern.exec(str);
// alert(RegExp.input);//当前被匹配的字符串
alert(a[0]);

var pattern =/B(OX)/ig;
var str='This is a Box!This is aaa Box!';	
pattern.test(str);
alert(str.split(pattern));
alert(str.split(pattern).length);//leftContext ($`),返回被查找的字符串中从字符串开始位置到最后匹配之前的位置之间的字符。只读。 
alert(RegExp.leftContext);
alert(RegExp.lastMatch);//最后一个【陪陪字符串
alert(RegExp.lastParen);//最后一对圆括号内的匹配子串
alert(RegExp.multiline);//最后一对圆括号内的匹配子串
input p[]



重复类匹配

var pattern=/g..gle/;//  . 符号表示匹配任意除了换行符外的任意字符 长度相同
var str='google';
alert(pattern.test(str));

var pattern=/go*gle/;//  o* 表示0个 1个或者多个o
var str='goooooogle';
alert(pattern.test(str));

var pattern=/go+gle/;//  o+表示1个 或者多个
var str='ggle';
alert(pattern.test(str));

var pattern=/go?gle/;//  o? 表示1个 或者0个
var str='google';
alert(pattern.test(str));

var pattern=/g.?gle/;//  .?表示1个 或者0个的任意字符
var str='gbbgle';
alert(pattern.test(str));

var pattern=/go{2,4}gle/;//  o{2,4}表示匹配o 2-4次,包含2和4
var str='gooooogle';
alert(pattern.test(str));

var pattern=/go{3}gle/;//  o{3}表示只能限定为3个
var str='google';
alert(pattern.test(str));

var pattern=/go{3,}gle/;//  o{3,}表示为3个或3个以上
var str='google';
alert(pattern.test(str));


字符类匹配

var pattern=/[a-z]oogle/;//[a-z]表示26个小写字母 任意一个都可以匹配
var str='6oogle';
alert(pattern.test(str));

var pattern=/[A-Z]oogle/;//[A-Z]表示26个大写字母 任意一个都可以匹配 不加i 小写不能与之匹配
var str='Google';
alert(pattern.test(str));


var pattern=/[0-9]*oogle/;//[0-9]*表示0次1次或者多次
var str='666oogle';
alert(pattern.test(str));

var pattern=/[0-9]?oogle/;// 什么都不加表示至少一次    []?
var str='629oogle';
alert(pattern.test(str));

var pattern=/[a-zA-Z0-9]oogle/;
var str='oogle';
alert(pattern.test(str));

var pattern=/[^a-zA-Z0-9]oogle/;// [^0-9]表示非0-9的任意字符 匹配任意不在括号中的字符集中的字符
var str='_oogle';
alert(pattern.test(str));

var pattern=/[a-z][A-Z]+/;//[a-z]表示26个小写字母 任意一个都可以匹配
var str='gGOOGLE';
alert(pattern.test(str));

var pattern=/^[0-9]oogle/;//这个 ^符号 加在/后 而不是[]里面
var str='6oogle';
alert(pattern.test(str));


var pattern=/^[0-9]+oogle/;//+号可以匹配一个或者多个
var str='622oogle';
alert(pattern.test(str));


var pattern=/woogle/;   // w表示[a-zA-Z0-9_]
var str='4oogle';
alert(pattern.test(str));


var pattern=/Woogle/;   // W表示[^a-zA-Z0-9_]
var str='_oogle';
alert(pattern.test(str));

var pattern=/good{3}gle/;   //d表示[0-9]
var str='goo523gle';
alert(pattern.test(str));

var pattern=/Doogle/;   //D表示[^0-9]
var str='aoogle';
alert(pattern.test(str));

var pattern=/^[a-z]oogl[0-9]+$/;   // ^强制首匹配 $强制尾匹配
var str='googl555';
alert(pattern.test(str));

var pattern=/goo gle/; //直接使用空格匹配
var str='goo gle';
alert(pattern.test(str));

var pattern=/goosgle/; // s表示空格匹配
var str='goo gle';
alert(pattern.test(str));

var pattern=/google/; // 表示是否到达边界
var str='google';
alert(pattern.test(str));

var pattern=/google/; // 表示是否到达边界
var str='google';
alert(pattern.test(str));

var pattern=/google|baidu|bing/;
var str='baidu';
alert(pattern.test(str));


var pattern=/google|baidu|bing/; //  |表示匹配 或 选择模式
var str='this is soso';			// 匹配概念 不是相等 包含意思
alert(pattern.test(str));

var pattern=/google{4,8}$/;  //表示e的4-8次
var str='googleee';
alert(pattern.test(str));

var pattern=/(google){4,8}$/;	//分组 可以看成一个字符
var str='googleeeeeeeee';    			//表示google 4-8次
alert(pattern.test(str));		


var pattern =/8(.*)8/;
var str='this is a 8google8';
// pattern.test(str); //必须要运行一下
str.match(pattern); //必须要运行一下
// pattern.exec(str); //必须要运行一下
alert(RegExp.$1); //表示获取模式中第一个分组对应的匹配字符串


var pattern=/8(.*)8/;
var str='this is a 8badu8';
document.write(str.replace(pattern, '<strong>$1</strong>'));//$1表示分组获取字符串匹配到的内容


var pattern=/(.*)s(.*)/;
var str='google baidu';
alert(str.replace(pattern,'$1 $2'));  //位置交换



关于贪婪和惰性
!!!!!!!!!!!!!!!*********************************************!!!!!!!!!!!!!!!!!!!!!!!!!1/
var pattern=/[a-z]+?/g;     //这里使用了贪婪模式
var str='abcdrfg';
alert(str.replace(pattern, '1')); //所有的字符串变成了1
document.write(str.replace(pattern, '1'));


var pattern=/[a-z]+?/;     //这里使用了惰性模式
var str='abcdrfg';
alert(str.replace(pattern, '1')); //只有第一个字符变成1   后面没有匹配



var pattern=/[a-z]+?/g;     //开启全局并且使用惰性模式
var str='abcdrfg';
alert(str.replace(pattern, '1')); //每个字母替换成1



var pattern=/8(.*)8/;    //使用了贪婪
var str='8google8 8google8 8google8 8google8'; //匹配到了google8 8google8 8google8 8google
document.write(str.replace(pattern, '<strong>$1</strong>'));



var pattern=/8(.*?)8/g;    //使用惰性  这次正确
var str='8google8 8google8 8google8 8google8'; 
document.write(str.replace(pattern, '<strong>$1</strong>'));

另一种惰性 屏蔽了8的匹配 也就是两边包含字符
var pattern=/8([^8]*)8/g;    
var str='8google8 8google8 8google8 8google8'; 
document.write(str.replace(pattern, '<strong>$1</strong>'));

var pattern=/^[a-z]+s[0-9]{4}$/;
var str='google 2012';
alert(typeof pattern.exec(str));  //返回一个包含字符串的数组


var pattern=/^[a-z]+/;  //只匹配到字母
var str='google 2012';
var obj=pattern.exec(str);
alert(obj);  //只返回google的字符串
alert(obj[1]);


var pattern=/^([a-z]+)s([0-9]{4})$/;  //使用分组
var str='google 2012';
var obj=pattern.exec(str);
// alert(obj.length);  //只返回google的字符串
alert(obj[0]); //返回匹配到的整个字符串
alert(obj[1]);//a[1]返回匹配到的第一个分组的字符串
alert(obj[2]);//a[2]返回匹配到的第二个分组的字符串




var pattern=/(d+)([a-z]+)/;//这个叫做捕获性分组 所有的分组都捕获返回 没有+号只匹配一个字符
var str='123abc';
var obj=pattern.exec(str);
a[0]返回123a
a[1]返回123
a[2]返回a

var pattern=/(d+)(?:[a-z]+)/;//非捕获性分组 只要在不需要捕获返回的分组加上?:
var str='123abc';
var obj=pattern.exec(str);
alert(obj);


a[0],整个匹配到的字符串abc 
a[1],匹配第一个分组(a?(b?(c?))) abc
a[2], 匹配第二个分组(b?(c?))  bc
a[3], 匹配都三个分组(c?),c

var pattern=/(a?(b?(c?)))/;//嵌套分组 从外往内获取
var str='abc';
var obj=pattern.exec(str);
alert(obj);

var pattern=/goo(?=gle)/; //goo后面必须是gle才能返回goo 这里一定要注意 返回的是goo 而不是
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
2.google
3.bing';
alert(str.replace(pattern, '#'));



匹配邮政编码
var str='this is 024000';//必须是6位数字 第一位不能为0
var pattern=/[1-9][0-9]{5}/;//
alert(pattern.test(str));


匹配压缩包文件名
var str='21asdasd3.zip';//文件名:字母__数字 .zip  .gz .rar .7z
// var pattern=/文件名.扩展名/;
var pattern=/^w+.zip|gz|rar/;// w+ 加上^来限定首字符
alert(pattern.test(str));



匹配多余空格
var str='111 222 333 555';
var pattern=/s/g;  //注意开启全局
alert(str.replace(pattern, ''));


删除收尾空格    用两次正则

var str='                   goo      gle        ';
// var pattern=/^s+[w+]/;
var pattern=/^s+/;
var result=str.replace(pattern, '')
pattern=/s+$/;
result=result.replace(pattern, '')
alert('|'+result+'|');


var pattern=/^s+(.*)s+$/;
var str='         goo            gle      ';
var result=str.replace(pattern, '');
alert('|'+result+'|');

!!!!!!!!!!!!!!!!!!!!!!!!!!惰性模式////////////////////////
var str='         goo            gle      '; 
var pattern=/^s+(.+?)s+$/;//  (.+)贪婪模式   惰性模式
var result=pattern.exec(str)[1];
alert('|'+result+'|');



var str='         goo            gle      '; 
var pattern=/^s+(.+?)s+$/;					//  (.+)贪婪模式   惰性模式
var result=str.replace(pattern, '$1');  //使用分组模式
alert('|'+result+'|');


var str='551961571@222.cc';
var pattern=/^([w.-]+)@([w-]+).([a-zA-Z]{2,4})$/;
alert(pattern.test(str));

原文地址:https://www.cnblogs.com/fighterhit/p/6387935.html