一、正则的两种写法:
var re = /a/; //一般情况下都用简写的方式 性能好
var re = new RegExp('a'); //需要传入参数的时候用
二、转义字符:
\n 换行
\r 制表
\t 回车
\s 空格
\S 非空格
\d 数字
\D 非数字
\w 字符 ( 字母 ,数字,下划线_ )
\W 非字符
. 任意字符
\. 真正的点
\b 独立的部分 ( 起始,结束,空格 )
\B 独立的部分
\1 重复的第一个子项
\2 重复的第二个子项
三、正则的方法:
1、test:正则去匹配字符串,如果匹配成功就返回真,如果匹配失败就返回假;test的写法 : 正则.test(字符串)
var str = '374829348791'; var re = /\D/; alert( re.test( str ) ); // false 匹配失败
2、search : 正则去匹配字符串 , 如果匹配成功,就返回匹配成功的位置,如果匹配失败就返回 -1(和字符串里面的indexOf方法很像);search的写法 : 字符串.search(正则)
正则中的i:正则中默认是区分大小写的;如果不区分大小写的话,在正则的最后加标识 i
var str = 'abcdef'; var re = /B/i; //var re = new RegExp('B','i'); //也可以写成这种形式 alert( str.search(re) ); //true
3、match : 正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null;match的写法 : 字符串.match(正则)
正则默认:正则匹配成功就会结束,不会继续匹配;如果想全部查找,就要加标识 g(全局匹配)
量词 : 匹配不确定的位置;+ : 至少出现一次(>=1次 都会被找到)
var str1 = 'asdhfgsaghd12332slsd34'; var re = /\d+/g; alert( str1.match(re)); //[12332,34]
4、replace:正则去匹配字符串,匹配成功的字符去替换成新的字符串;replace的写法 : 字符串.replace(正则,新的字符串)
var str = 'aaa';
var re = /a+/g; //此时'a'替换了'aaa' str = str.replace(re,'b'); alert(str); //'b'
四、匹配子项 : 小括号 () (还有另外一个意思,分组操作)
var str = '2013-6-7'; var re = /(\d+)(-)/g; str = str.replace(re,function($0,$1,$2){
//第一个参数:$0(整体)
//第二个参数 : $1(第一括号里的正则)
//第三个参数 : $2(第二个括号里的正则) //alert( $2 ); //return $1 + '.'; return $0.substring(0,$0.length-1) + '.'; }); alert( str ); //2013.6.7
五、字符类 : 一组相似的元素 [] 中括号的整体代表一个字符
var str = 'abdc'; var re = /a[bde]c/; //字符类中的是“或”的关系 但是整体的位数要和字符串的一致 alert( re.test(str) ); //true
排除 : ^ 如果^写在[]里面的话,就代表排除的意思
var str = 'abc'; var re = /a[^bde]c/; //取反 alert( re.test(str) ); //false
六、找出字符串中最多的字符和个数:
var str = 'assssjdssskssalsssdkjsssdss'; var arr = str.split(''); str = arr.sort().join(''); //alert(str); var value = '';
var index = 0; var re = /(\w)\1+/g; str.replace(re,function($0,$1){ //alert($0); if(index<$0.length){
index = $0.length;
value = $1;
} }); alert('最多的字符:'+value+',重复的次数:'+index);
七、量词:出现的次数,常用的量词有:
{n,} 至少n次
* 任意次 {0,}
? 零次或一次 {0,1}
+ 一次或任意次{1,}
{n} 正好n次
八、去掉前后空格:^开始 $结束
var str = ' hello '; function trim(str){ var re = /^\s+|\s+$/g; return str.replace(re,''); } alert( '('+trim(str)+')' );
九、常用的正则例子(高级表单验证)
匹配中文:[\u4e00-\u9fa5]
行首行尾空格:^\s*|\s*$
Email:^\w+@[a-z0-9]+(\.[a-z]+){1,3}$
网址:[a-zA-z]+://[^\s]*
QQ号:[1-9][0-9]{4,9}
邮政编码:[1-9]\d{5}
身份证:[1-9]\d{14}|[1-9]\d{17}|[1-9]\d{16}x