一、什么叫正则?
Regular Expression,在代码中常简写为regex、regexp或RE;
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
目的:
1、给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”),
2、可以通过正则表达式,从字符串中获取我们想要的特定部分。
特点:
1、灵活性、逻辑性和功能性非常强;
2、可以迅速地用极简单的方式达到字符串的复杂控制。
二、书写形式
<script>
var re=//;
var re=new RegExp;
</script>
三、正则表达式常用方法
1、test方法
test:正则去匹配字符串,如果匹配成功就返回true,匹配失败就返回false;
test写法:正则.test(字符串)
<script type="text/javascript">
var phone=$("#phone").val();
var phonereg=/^(\d{3,4}-)\d{7,8}$/;
if(!phonereg.test(phone)){
alert("请输入正确的电话");
$("#phone").focus();
return false;
}
</script>
2、search方法
search:正则去匹配字符串,如果匹配成功就返回匹配成功的位置,匹配失败就返回-1;
search写法:字符串.search(正则)
正则中默认区分大小写
如果不区分大小写,在正则的后面加 i
<script>
var re=/b/i;
var re=new RegExp('b','i'); //i不区分大小写
</script>
3、match方法
match:正则去匹配字符串,如果匹配成功就返回匹配成功的数组,匹配失败就返回null;
match写法:字符串.match(正则)
正则默认:正则匹配成功就会结束,不会继续匹配
如果想要全部匹配 在正则的后面加 g
<script>
var str='hs123howe456seoaji789';
//function fnNum(str){
// var arr=[];
// var tmp='';
// for(var i=0;i<str.length;i++){
// if(str.charAt(i)<='9' && str.charAt(i)>='0'){
// tmp+=str.charAt(i);
// }else{
// if(tmp){
// arr.push(tmp);
// tmp='';
// }
// }
// }
// if(tmp){
// arr.push(tmp);
// tmp='';
// }
// return arr;
//}
var re=/\d+/g; //g全局匹配 +量词:至少出现一位
alert(str.match(re));
</script>
4、replace方法
replace:正则去匹配字符串,匹配成功的字符串替换新的字符串
replace写法:字符串.replace(正则,新的字符串)
replace第二个参数:可以是字符串,也可以是一个函数
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<style>
textarea{height:100px;}
</style>
<script>
//巴西《里约时报》3日报道称,火情始于当地时间2日晚7时30分许,几乎烧了整整一夜
window.onload=function(){
var aT=document.getElementsByTagName('textarea');
var oBtn=document.getElementById('btn');
oBtn.onclick=function(){
var re=/里约时报|火情/g; // '|'表示或
aT[1].value=aT[0].value.replace(re,function(str){
alert(str);
var result='';
for(i=0;i<str.length;i++){
result +='*';
}
return result;
})
}
}
</script>
</head>
<body>
替换前:<br>
<textarea>
</textarea><br>
替换后:<br>
<textarea>
</textarea>
<input type="submit" value="确定" id="btn">
</body>
</html>
四、匹配子项:小括号的作用(分组或子项)
<script>
var str="2018-9-5";
var re=/(\d+)(-)/;
str.replace(re,function($0,$1,$2){
//第一个参数:为正则整体;第二个参数:为第一个子项;第三个参数:为第二个子项;
return $1+".";
return $0.substring(0,$0.length-1)+'.';
})
</script>
<script>
var str="abd";
var re=/(a)(b)(d)/;
alert(str.match(re)); //[abd,a,b,d] 当match不加 “g” 的时候才能匹配到子项的集合
</script>
五、正则中的字符类
字符类:一组相似的元素 [ ]中括号整体代表一个字符
排除:^ 如果^在[^a]里面的话,就表示排除a
范围:[a-z]、[0-9]、[A-Z]、[a-z0-9A-Z]
转义字符:
.(点)——任意字符
\.真正的点
\s:空格 \d:数字 \w:字符 \b:独立部分
\S:非空格 \D:非数字 \W:非字符 \B:非独立部分
\1:重复的第一个子项
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<style>li{list-style:none;}</style>
<script type="text/javascript">
window.onload=function(){
var aLi=getElementsByClassName(document,"li","box");
alert(aLi.length);
for(var i=0;i<aLi.length;i++){
aLi[i].style.background='red';
}
function getElementsByClassName(parent,tagName,className){
var aEls=parent.getElementsByTagName(tagName); //获取页面所有的元素
var arr=[]; //空数组
// var re=//; //当需要传参的时候,一定要用全称的写法
var re=new RegExp('\\b+className+\\b');
for(var i=0;i<.length;i++){
if(re.test(aEls[i].className)){ //有重复同样类名的
arr.push(aEls[i]);
break; //执行完之后跳出当前循环
}
}
return arr;
}
}
</script>
</head>
<body>
<ul id="ul1">
<li>11111</li>
<li class="box">22222</li>
<li>33333</li>
<li class="boxbox2">44444</li>
</ul>
<ul id="ul2">
<li>11111</li>
<li class="box">22222</li>
<li>33333</li>
<li class="box">44444</li>
</ul>
</body>
</html>
<script>
var str="sssgggdeedfaagggassssss";
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+";");
</script>
六、量词{ }
{4,7}最少出现4次,最多出现7次;
{4,}最少出现4次
{4}刚好出现4次
+:{1,} \d+或者\d{1,}
?:{0,1}零次或者一次
*:{0,}至少出现0次
^:正则最开始的位置,表示起始位置
$:正则最后的位置,表示结束位置
<script>
//去掉前后空格
var str=" hello ";
alert('('+trim(str)+')');
function trim(){
re=/^\s+|\s+$/g;
return str.replace(re,'');
}
</script>
七、常用正则
1.验证用户名和密码:("^[a-zA-Z]\w{5,15}$")正确格式:"[A-Z][a-z]_[0-9]"组成,并且第一个字必须为字母6~16位;
2.验证电话号码:("^(\d{3,4}-)\d{7,8}$")正确格式:xxx/xxxx-xxxxxxx/xxxxxxxx;
3.验证手机号码:"^1[3|4|5|7|8][0-9]{9}$";
4.验证身份证号(15位):"\d{14}[[0-9],0-9xX]",(18位):"\d{17}[[0-9],0-9xX]";[1-9]\d{14}|[1-9]\d{17}|[1-9]\d{16}x
5.验证Email地址:("^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");/^\w+@[a-z0-9]+(\.[a-z]+){1,3}/$
6.只能输入由数字和26个英文字母组成的字符串:("^[A-Za-z0-9]+$");
7.整数或者小数:^[0-9]+([.][0-9]+){0,1}$
8.只能输入数字:"^[0-9]*$"。
9.只能输入n位的数字:"^\d{n}$"。
10.只能输入至少n位的数字:"^\d{n,}$"。
11.只能输入m~n位的数字:"^\d{m,n}$"。
12.只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
13.只能输入有两位小数的正实数:"^[0-9]+(\.[0-9]{2})?$"。
14.只能输入有1~3位小数的正实数:"^[0-9]+(\.[0-9]{1,3})?$"。
15.只能输入非零的正整数:"^\+?[1-9][0-9]*$"。
16.只能输入非零的负整数:"^\-[1-9][0-9]*$"。
17.只能输入长度为3的字符:"^.{3}$"。
18.只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
19.只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
20.只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
21.验证是否含有^%&',;=?$\"等字符:"[%&',;=?$\\^]+"。
22.只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"。
23.验证URL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。 [a-zA-Z]+://[^\s]*
24.验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"10"~"12"。
25.验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"、"10"~"29"和“30”~“31”。
26.获取日期正则表达式:\\d{4}[年|\-|\.]\d{\1-\12}[月|\-|\.]\d{\1-\31}日?
27.匹配双字节字符(包括汉字在内):[^\x00-\xff])
28.匹配空白行的正则表达式:\n\s*\r
29.匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</>|<.*? />
30.匹配首尾空白字符的正则表达式:^\s*|\s*$,/^\s+|\s+$/g
31.匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
32.匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
33.匹配腾讯QQ号:[1-9][0-9]{4,}或者/^[1-9]\d{4,11}$/
34.匹配中国邮政编码:[1-9]\\d{5}(?!\d)
35.匹配ip地址:([1-9]{1,3}\.){3}[1-9]。
36.匹配MAC地址:([A-Fa-f0-9]{2}\:){5}[A-Fa-f0-9]