正则表达式
1、正则都是操作字符串的
2、正则写法:
var re=//;
var re=new RegExp();
var re=/a/; var re=new RegExp('a');
3、test:正则去匹配字符串,如果匹配成功就返回真,否则为假
test的写法:正则.test(字符串);
4、转义字符:
\n:换行
\r:指表
\t:回车
\s:空格
\S:非空格
\d:数字
\D:非数字
\w:字符 (字母,数字,下划线)
\W:非字符
. :任意字符
\.:真正的点
\b:独立部分(是起始或结束或空格才算匹配成功)独立部分的应用:获取class元素
\B:非独立部分
\1:重复的第一个子项 应用:找重复项最多的字符和个数
\2:重复的第二个子项
.....
例:
var str='abc';
var re=/a.c/;
alert(re.test(str));//结果为true
var str='a.c';
var re=/a\.c/;
alert(re.test(str));//结果为true
var str='abc';
var re=/a\.c/;
alert(re.test(str));//结果为false
var str='onetwo';
var re=/\bone/;
alert(re.test(str));//结果为true
var str='onetwo';
var re=/one\b/;
alert(re.test(str));//结果为false
var str='one two';
var re=/one\b/;
alert(re.test(str));//结果为true
var str='onetwo';
var re=/\bone\b/;
alert(re.test(str));//结果为false 都得满足才算成功
var str='abca';
var re=/(a)(b)(c)\1/
alert(re.test(str));// 结果为true
var re=/\w\w/; 如果匹配的字符为cb,结果为true,因为只要两个都是字符就可以成功
var re=/\w\1/;如果匹配的字符为cb,结果为false,如果匹配cc或bb才会是true,只有前一个与后一个相同才为true
5、search:正则去匹配字符串,如果匹配成功,就返回匹配成功的位置,如果匹配失败就返回-1
写法:字符串.search(正则);
6、正则中默认区分大小写,如果不区分大小写,则需要在正则最后加标识 i
var re=/B/i;
var re=new RegExp('B','i');
7、match:正则去匹配字符串,如果匹配成功,就匹配成功的数组,否则返回null。
正则默认:正则匹配成功就会结束,不会再继续匹配,如果想全部查找,就要加标识g(全局匹配)
量词:匹配不确定的位置
+:至少出现1次
写法:字符串.match(正则)
var re=/\d/g;
8、replace:正则去匹配字符串,匹配成功的字符去替换成新的字符串
replace写法:字符串.replace(正则,想要替换新的字符串);
replace的第二个参数可以是字符串也可以是回调函数
例:var str='aaa';
var re=/a/; //结果为baa
var re=/a/g; //结果为bbb
var re=/a+/g; //结果为b
str=str.replace(re,'b');
9、“|”在正则中表示或的意思
var re=/a|b|c/;
10、匹配子项:小括号()---分组操作 如果把正则整体叫做母亲,则小括号里面的正则交做子项
str.replace(re,function($0,$1,$2){
//第一个参数$0(母亲),$1第一个孩子,$2第二个孩子
});
var str='abc';
var re=/(a)(b)(c)/;
alert(str.match(re)); //结果[abc,a,b,c]-------当match不加g的时候才可以获取到子项的集合
11、 字符类:一组相似元素 []中括号整体代表一个字符,也就是说,括号中的任意一个字符与要匹配的字符串中对应位置的字符相同
var str='abc';
var re=/a[bde]c/;
alert(re.test(str));//结果为true
var str='abdc';
var re=/a[bde]c/; //---[bde]整体对应b
alert(re.test(str));//结果为false
12、排除:^如果写在[]里面的话,就代表排除的意思
var str='abc';
var re=/a[^bde]c/; //不是bde的任意一个
alert(re.test(str)); //结果为false
13、范围:-可以表示范围,注意范围需要从小到大
var re=/a[a-z0-9]+c/; a到z的字母 0-9数字
14、当正则需要传参的时候,一定要用全称的写法
例:独立部分的应用:获取class元素 class='box1' class='box1 box2' class='box1box2' 中'box1'
function getClass(oParent,sClass){
var arr=[];
var aEle=oParent.getElementsByTagName('*');
var re=new RegExp('\\b'+sClass+'\\b');
for(var i=0;i<aEle.length;i++){
if(re.test(aEle[i].className)){
arr.push(aEle[i]);
}
}
}
15、应用:找重复项最多的字符和个数
var str='adfaaacddaaasssssghhsjksffs' var arr=str.split('');//拆分成数组 str=arr.sort().join('');//拆分数组后排序,使得相同字母挨在一起,再转化为字符串 var value=''; var index=0; var re=/(\w)\1+/g; str.replace(re,function ($0,$1) { if(index<$0.length){ index=$0.length; value=$1; } }); alert('最多的字符:'+value+',重复的次数'+index); }
16、量词: 不确定位置出现的次数
{n,m}至少出现n次,最多出现m次
{n,} 至少n次
{n}正好n次
* 任意次 {0,}
?零次或1次 {0,1}
+一次或任意次 {1,}
17、 \d*表示零次或多次数字
18、^如果写在正则最开始的位置,代表起始的意思,
$如果写在正则的最后位置,代表结束的意思
例:查找QQ号
var re=/^[1-9]\d{4,11}$/;
如何去掉字符串中的前后空格
var re =/^\s+|\s+$/g;
str.replace(re,'');
19、高级表单校验
匹配中文:[\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