正则案例
使用点元字符
var pattern = /g..gle/; //.匹配一个任意字符
var str = 'google';
alert(pattern.test(str));
重复多次匹配
var pattern = /g.*gle/; //.匹配 0 到多个
var str = 'google'; //*,?,+,{n,m}
alert(pattern.test(str));
使用字符类匹配
var pattern = /g[a-zA-Z_]*gle/; //[a-z]*表示任意个 a-z 中的字符
var str = 'google';
alert(pattern.test(str));
var pattern = /g[^0-9]*gle/; //[^0-9]*表示任意个非 0-9 的字符
var str = 'google';
alert(pattern.test(str));
var pattern = /[a-z][A-Z]/; //[A-Z]+表示 A-Z 一次或多次
var str = 'gOOGLE';// 把gO识别出来
alert(pattern.test(str));
使用元符号匹配
var pattern = /g\w*gle/; //\w*匹配任意多个所有字母数字_
var str = 'google';
alert(pattern.test(str));
var pattern = /google\d*/; //\d*匹配任意多个数字
var str = 'google444';
alert(pattern.test(str));
var pattern = /\D{7,}/; //\D{7,}匹配至少 7 个非数字
var str = 'google8';
alert(pattern.test(str));
使用锚元字符匹配
var pattern = /^google$/; //^从开头匹配,$从结尾开始匹配
var str = 'google';
alert(pattern.test(str));
var pattern = /goo\sgle/; //\s 可以匹配到空格
var str = 'goo gle';
alert(pattern.test(str));
var pattern = /google\b/; //\b 可以匹配是否到了边界
var str = 'google';
var str2= 'googleaa googlexx google dsdddd';
alert(pattern.test(str));
使用或模式匹配
var pattern = /google|baidu|bing/; //匹配三种其中一种字符串
var str = 'google';
alert(pattern.test(str));
使用分组模式匹配
var pattern = /(google){4,8}/; //匹配分组里的字符串 4-8 次
var str = 'googlegoogle';
alert(pattern.test(str));
var pattern = /8(.*)8/; //获取 8..8 之间的任意字符
var str = 'This is 8google8, dd 8ggg8';
console.log(str.match(pattern));
//下标0指正则匹配出来的值,下标1指小括号分组匹配出来的值;
//如果加上全局参数g,分组里的值就取不出来
var pattern = /8(.*)8/;
var str = 'This is 8google8';
var result = str.replace(pattern,'<strong>$1</strong>'); //得到替换的字符串输出
document.write(result);
var pattern = /(.*)\s(.*)/;
var str = 'google baidu';
var result = str.replace(pattern, '$2 $1'); //将两个分组的值替换输出
document.write(result);
使用 exec 返回数组
var pattern = /^[a-z]+\s[0-9]{4}$/i;
var str = 'google 2012';
alert(pattern.exec(str)); //返回整个字符串
var pattern = /^[a-z]+/i; //只匹配字母
var str = 'google 2012';
alert(pattern.exec(str)); //返回 google
var pattern = /^([a-z]+)\s([0-9]{4})$/i; //使用分组
var str = 'google 2012';
alert(pattern.exec(str)[0]); //google 2012
alert(pattern.exec(str)[1]); //google
alert(pattern.exec(str)[2]); //2012
捕获性分组
var pattern = /(\d+)([a-z])/; //捕获性分组
var str = '123abc';
console.log(pattern.exec(str));
非捕获性分组
//?=n 量词匹配任何其后紧接指定字符串 n 的字符串。
var str="Is this all there is";
var pattern=/is(?= all)/g;//对其后紧跟 "all" 的 "is" 进行全局搜索
console.log( pattern.exec(str) ); // is 是 this 中的 is
//?!n 量词匹配其后没有紧接指定字符串 n 的任何字符串。
var str="Is this all there is";
var pattern=/is(?! all)/gi;//对其后没有紧跟 "all" 的 "is" 进行全局搜索
console.log( pattern.exec(str) );//Is
console.log( pattern.exec(str) );//is
使用分组嵌套
var pattern = /(A?(B?(C?)))/; //从外往内获取
var str = 'ABC';
console.log(pattern.exec(str));
使用特殊字符匹配
var pattern = /\.\[\/b\]/; //特殊字符,用\符号转义即可
var str = '.[/b]';
console.log(pattern.test(str));
使用换行模式
var pattern = /^\d+/mg; //启用了换行模式
var str = '1.baidu\n2.google\n3.bing';
var result = str.replace(pattern, '#');
alert(result);
邮政编码检测
//共 6 位数字
/^\d{6}$/
文件格式检测
//xxx.zip\xxx.gz\xxx.rar
/^\w+\.(zip|gz|rar)$/
字符串首尾去空格
str = str.replace(/^\s+/,''); //去掉左侧的空格
str = str.replace(/\s+$/,''); //去掉右侧的空格
邮件格式检测
//xxxxx @ xxxx(.xxxx)
/^\w+@\w+(\.\w+)+$/
手机号检测
// 以1开头的11位数字
/^13\d{9}$/
身份证检测
// 18位数字或 17位数字加X
/^\d{17}(\d|X)$/
日期检测
// xxxx-xx-xx| xxxx/xx/xx | xxxx.xx.xx
/^(\d{2}|\d{4})[-\/\.]\d{2}[-\/\.]\d{2}$/
中文检测
// 把非中文替换为空
str.replace(/[^\u4e00-\u9fa5]/g,'')
用户名检测
// 账户名只能使用数字字母下划线,且数字不能开头,长度在6-15之间
/^[a-zA-Z_]\w{5,14}$/
字符串过滤
// 将所有的bag、beg、big和bog改为bug
str.replace(/(bag|beg|big|bog)/g,'bug')