正则表达式
正则表达式:计算机理解的规则,强大的字符串匹配工具。简单来说,是一种规则、模式。
正则也是以对象的形式存在,创建正则两种方法:
var re=new RegExp(“a”); //js风格 var re =/ a /; // per 风格
我们先说一下操作字符串的几个属性,以便更好的操作正则:
- search:返回提取所在位置,找不到返回-1。
var str="abcefg"; alert(str.search("a"));//位置,-1 alert(str.search("w")); // 0
- match:把所有匹配的东西全部找出来。
var str="123 -/a 11agcccg3411"; alert(str.match(/\d/g)) ; //1,2,3,1,1,3,4,1,1
- replace:替换成想要的东西。
var str="abcaa"; var re=/a/g; alert(str.replace(re,"0")); //0bc00
- charAt:返回对应的字符。
var str="abcdef"; alert(str.charAt(1)); //b 返回1对应的字符
- split:字符串切分。
var str="a-b-5-1"; var arr=str.split("-"); alert(arr); //a,b,5,1 可以做字符串切分
- substring:返回对应的字符,但不包括结束位置。
var str="abcdef";
alert(str.substring(1,5)); // bcde 不包括结束位置 alert(str.substring(1)); //bcdef 一个时,到结束
下面我们步入正题
1.js 大小写敏感
正则忽略大小写:" i " (ignore)
var er=new RegExp("a","i"); //var er=/a/i //或者这种写法 var str="ABc"; alert(str.search(er));
//0
2.找到全部:"g" (global)
var str="123 -/a 11agcccg3411"; alert(str.match(/\d+/g)) //alert(str.match(/[0-9]+/g)) 也可以
//123,11,3411
3.或者: " | "(竖线)
4.元字符(方括号):" [ ] " ;
- 任意字符:[abc]:abc 三个其中任选一个即可 。[abc]pc: 符合的——>apc bpc cpc;
- 范围:[a-z] [0-9]
- 排除:[^a-z] :除了a-z; [^0-9] :除了a-z; [^a-z0-9] :除了a-z 0-9;
5.量词:个数
- {n} 正好出现n次 [1-9]/d{7} ->八位电话号码
- {n,m} 最少n次,最多m次 [1-9]/d{4,10} ->5 或者 11位 QQ号
- {n,} 最少n次,最多不限
- + == {1,}最少1次,若干,
- ? == {0,1} 可有可无 (0\d{2,3}-)?[1-9]\d{7}(-\d{1,5})?->5 有无区别的固定电话,有无分机号
- * == {0,} 不建议用
6.转义字符:
- " . " (点)——任意字符(尽量不要去用)
正则有一个贪婪特性,进可能匹配长的字符串
一个过滤html标签的例子:<script> window.onload=function(){ var oTxt1=document.getElementById("txt1"); var oTxt2=document.getElementById("txt2"); var Btn=document.getElementById("btn"); Btn.onclick=function(){ var re=/<[^<>]+>/g; oTxt2.value=oTxt1.value.replace(re,'') }; } </script> <textarea rows="20" cols="20" id="txt1" "></textarea> <input type="button" id="btn" value="过滤"> <textarea rows="20" cols="20" id="txt2" "></textarea>
注意: / < . +> / 不完善
/ <[ ^ <> ] + > / 除了 " <> " 以外的任意字符 - \d 数字 [0-9]
- \w 英文、数字、下划线 [a-z 0-9 ]
- \s 空白字符
- \D 除了数字 [^0-9]
- \W 除了 英文、数字、下划线 [^a-z 0-9 ]
- \S 除了空白字符
- ^ 放在正则 行首(不在" [ ] "时 )
- $ 放在正则 行尾(不在" [ ] "时 )
注意 : 通过正则找” . “ 时用 ' \ . ';
通过正则找” \d “ 时用 ' \\d ';
正则 test方法 :判断是否符合正则规则,返回ture和false 。需要注意的是,只要name一部分符合reg的要求就会返回true,这时候就需要用到^
及$
,分别表示行首和行尾;
邮箱验证:
<script> window.onload=function(){ var oTxt=document.getElementById("txt"); var oBtn=document.getElementById("btn"); oBtn.onclick=function(){ var re=/^\w+@[a-z0-9]+\.[a-z]+$/i; if(re.test(oTxt.value)) { alert("合法邮箱") } else { alert("你写错了") } }; } </script> </head> <body> <input type="text" id="txt"> <input type="button" id="btn" value="验证"> </body>
小的时候,以为所有人都喜欢我,长大以后才发现,我想错了,原来是全宇宙!