Javascript中的正则表达式笔记和相关练习

Posted on 2018-03-28 12:06  Jonathan_C  阅读(184)  评论(0)    收藏  举报

很早就打算总结一下正则表达式(regular expression)的语法,今天来稍微整理一下,后期会不定时的加入新的知识点。

  • 首先要明白正则表达式是用于处理字符串匹配的问题。
  • 对于正则表达式的使用,需要先创建一个正则表达式对象
1 var reg=new RegExp(' a ')
2 //或者
3 var reg=/a/这种方法比较简便
  • 常用的方法为:
  1. 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

 

    就先写到这,以后碰到有意思的再补充