很早就打算总结一下正则表达式(regular expression)的语法,今天来稍微整理一下,后期会不定时的加入新的知识点。
- 首先要明白正则表达式是用于处理字符串匹配的问题。
- 对于正则表达式的使用,需要先创建一个正则表达式对象
1 var reg=new RegExp(' a ') 2 //或者 3 var reg=/a/这种方法比较简便
- 常用的方法为:
- test()
var string="abvfddsadew"; var reg=/ \D/; reg.test(string)//记住test是正则表达式对象的方法。返回值为true或false
2. search()用于搜索正则内容,如果搜索到匹配,那么就返回出现的位置,否则返回-1
3. match()用于寻找匹配的字符串片段,返回所匹配的该片段,并且以数组的形式返回。
1 var string="haj123sdk54hask33dkhalsd879"; 2 var reg=/\d+/g; 3 console.log(string.match(reg));//["123", "54", "33", "879"]
4. replace()是在match的基础上替换匹配的字符串,传入的参数可以为字符串,或者是回调函数
1 var string="haj123sdk54hask33dkhalsd879"; 2 var reg=/(\d+)/g 3 var res=string.replace(reg,"*"); 4 console.log(res);//haj*sdk*hask*dkhalsd* 5 var res_2=string.replace(reg,function(string){ 6 var add=""; 7 for(var i=0;i!=string.length;i++){ 8 add+="*"; 9 } 10 return add; 11 }) 12 console.log(res_2);//haj***sdk**hask**dkhalsd***
这里强调一下,除了test和exec这两个式正则表达式的方法(reg.test(string)或者reg.exec(string)),其它都是字符串的方法。
- 下面介绍一下正则中的常见字符
\s : 空格
\S : 非空格
\d : 数字
\D : 非数字
\w : 字符 ( 字母 ,数字,下划线_ )
\W : 非字符
.(点)——任意字符
\. : 真正的点
\a 表示重复的某个子项,例如
/ (a) (b) (c) \1/-----匹配 abca 重复第一个子项:a/ (a) (b) (c) \2/------匹配 abcb 重复第二个子项:b\b : 独立的部分 ( 起始,结束,空格 )
\B : 非独立的部分
[] : 表示某个集合中的任意一个,比如 [abc] 整体代表一个字符 匹配 a b c 中的任意一个,也可以是范围,[0-9] 范围必须从小到大 。
[^a] 整体代表一个字符 :^写在[]里面的话,就代表排除的意思
():,小括号,叫做分组符。就相当于数学里面的括号
更多的相关符号可以参考这个https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fr=aladdin
- 总结一些典型的题型
1. 将 - 改成 .
1 var string="2013-6-7"; 2 var reg=/(\d+)-/g; 3 var res=string.replace(reg,function(a,b){//a是匹配成功的所有结果,b是匹配的第一个,以此类推 4 return b+="."; 5 }); 6 console.log(res);
2. 找重复项最多的字符个数
1 var string ="assssjdssskssalsssdkjsssdss"; 2 var arr=string.split(""); 3 string=arr.sort().join(""); 4 console.log(string); 5 var value=""; 6 var index=0; 7 var reg=/(\w)\1+/; 8 string.replace(reg, function(a,b){ 9 //这里会遍历一次所有匹配的结果,然后再用if判断 10 if(index<a.length){ 11 index=a.length; 12 value=b; 13 } 14 }) 15 console.log(value+": "+index);
3. 去掉前后空格
ECMAScript 5 有自带的trim()方法。当然,通过正则了解一下原理也能学到一些东西
1 var string =" hello world "; 2 var reg=/^\s+|\s+$/g; 3 console.log(string.replace(reg,""));
4.常见的表单验证方法
匹配中文:[\u4e00-\u9fa5] //中文ACALL码的范围 行首行尾空格:^\s*|\s*$ //首行出现任意个空格或者尾行出现任意个空格(任意表示也可以没有空格) Email:^\w+@[a-z0-9]+(\.[a-z]+){1,3}$ //起始至少为一个字符(\w字母,数字或者下划线),然后匹配@,接着为任意个字母或者数字,\.代表真正的点,.后面为至少一个的字符(a-z),同时这个(比如.com)整体为一个子项作为结束,
可以出现1-3次。因为有的邮箱是这样的.cn.net。(xxxx.@qq.com xxxx.@163.com xxxx.@16.cn.net ) 网址:[a-zA-z]+://[^\s]* http://...... //匹配不分大小写的任意字母,接着是//,后面是非空格的任意字符 邮政编码:[1-9]\d{5} //起始数字不能为0,然后是5个数字 身份证:[1-9]\d{14}|[1-9]\d{17}|[1-9]\d{16}x
就先写到这,以后碰到有意思的再补充
浙公网安备 33010602011771号