创建正则表达式
var r = /a/;
正则.test(字符串)
正则去匹配字符串,如果匹配成功就返回真,如果匹配失败就返回假
var str = 'abcdef';
var re = /b/;
alert( re.test(str) );
转义字符
\s : 空格
\S : 非空格
\d : 数字
\D : 非数字
\w : 字符 ( 字母 ,数字,下划线_ )
\W : 非字符
(大写都是反义)
例子: 判断是否全为数字
var str = '374829348791';
var re = /\D/;
if( re.test(str) ){
alert('不全是数字');
}
else{
alert('全是数字');
}
字符串.search(正则)
正则去匹配字符串 , 如果匹配成功,就返回匹配成功的位置,如果匹配失败就返回 -1
var str = 'abcdef';
var re = /b/;
alert( str.search(re) );
正则中的默认 : 是区分大小写的
如果不区分大小写的话,在正则的最后加标识 i
var str = 'abcdef';
var re = /B/i;
alert( str.search(re) );
字符串.match(正则)
正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null
var str = 'haj123sdk54hask33dkhalsd879';
var re = /\d/;
alert( str.match(re) );
正则默认:正则匹配成功就会结束,不会继续匹配
如果想全部查找,就要加标识 g(全局匹配)
var str = 'haj123sdk54hask33dkhalsd879';
var re = /\d/g;
alert( str.match(re) );
查找连在一起的数字
var str = 'haj123sdk54hask33dkhalsd879';
var re = /\d\d/g;
alert( str.match(re) );//只会找到12 54 33 87
量词 : 匹配不确定的位置
+
: 至少出现一次
var str = 'haj123sdk54hask33dkhalsd879';
var re = /\d+/g;
alert( str.match(re) );
字符串.replace(正则,新的字符串)
正则去匹配字符串,匹配成功的字符去替换成新的字符串
var str = 'aaa';
var re = /a+/g;
str = str.replace(re,'b');
alert(str);
例子:关键字过滤
//菲称仁爱礁附近17艘中国船均在菲军监视之下
//| : 或的意思
//replace : 第二个参数:可以是字符串,也可以是一个回调函数
var aT = document.getElementsByTagName('textarea');
var oInput = document.getElementById('input1');
var re = /菲称|中国船|监视之下/g;
oInput.onclick = function(){
//aT[1].value = aT[0].value.replace(re,'*');
aT[1].value = aT[0].value.replace(re,function(str){
//函数的第一个参数:就是匹配成功的字符
//alert( str );
var result = '';
for(var i=0;i<str.length;i++){
result += '*';
}
return result;
});
};
匹配子项 : 小括号 () (还有另外一个意思,分组操作)
把正则的整体叫做(母亲)
然后把左边第一个小括号里面的正则,叫做这个第一个子项(母亲的第一个孩子)
第二个小括号就是第二个孩子
var str = '2013-6-7';
var re = /(\d+)(-)/g;
str = str.replace(re,function($0,$1,$2){
//第一个参数:$0(母亲),第二个参数 : $1(第一个孩子)
//,第二个参数 : $1(第二个孩子)
//alert( $2 );
return $1 + '.';
});
alert( str ); //2013.6.7
字符类
一组相似的元素 [] 中括号的整体代表一个字符
var str = 'abc';
var re = /a[bde]c/;
alert( re.test(str) );
排除 : ^ 如果^写在[]里面的话,就代表排除的意思
var str = 'afc';
var re = /a[^bde]c/;
alert( re.test(str) );
var str = 'abc';
var re = /a[a-z0-9A-Z]c/;
alert( re.test(str) );
例子:过滤标签
替换前<br />
<textarea>
</textarea><br />
替换后<br />
<textarea>
</textarea><br />
<input type="button" value="确定" id="input1" />
<script>
window.onload = function(){
var aT = document.getElementsByTagName('textarea');
var oInput = document.getElementById('input1');
//var re = /<\w+>/g;
var re = /<[^>]+>/g;
oInput.onclick = function(){
aT[1].value = aT[0].value.replace(re,'');
};
};
</script>
转义字符
. : 任意字符
. : 真正的点
\b : 独立的部分 ( 起始,结束,空格 )
\B : 非独立的部分
//var str = 'one two';
var str = 'onetwo';
var re = /one\b/;
alert( re.test(str) );
量词 : {}
{4,7} : 最少出现4次,最多出现7次
{4,} : 最少出现4次
{4} : 正好出现4次
- : {1,}
? : {0,1} : 出现0次或者1次
- : {0,} : 至少出现0次*/
例子:判断是不是qq号
var re = /^[1-9]\d{4,11}$/;
邮箱:
var re = /^\w+@[a-z0-9]+(\.[a-z]+){1,3}$/;
重复的子项
\1 : 重复的第一个子项
\2 : 重复的第二个子项
var str = 'abca';
var re = /(a)(b)(c)\2/;
alert( re.test(str) )
下面写法的区别
var re = /\w\w/; //c9
var re = /(\w)\1/; //cc 99
例子: 找重复项最多的字符和个数
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);
网友评论