一、正则的两种写法:
var re = /a/; //一般情况下都用简写的方式 性能好 var re = new RegExp('a'); //需要传入参数的时候用
二、转义字符:
换行 制表 回车 s 空格 S 非空格 d 数字 D 非数字 w 字符 ( 字母 ,数字,下划线_ ) W 非字符
. 任意字符
. 真正的点
独立的部分 ( 起始,结束,空格 )
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