正则基础(附常用案例)

正在表达式全称(Regular Expression),是描述字符模式的对象。正则表达式在表单校验中很常用。了解正则的基本使用对一个开发人员来说再基础不过了,不管前端还是后端。

在这里插入图片描述

构造形式

  • 普通方式语法

    • var reg = /表达式/附加参数[可选]
    • 表达式为一个字符串或者特殊字符,代表某种规则

    • 参数主要用来扩展表达式的含义

      g:全局匹配
      i:不区分大小写匹配
      m:进行多行匹配
      • 举个栗子:

        var reg = /deDreram/;
        /*表示匹配含有deDream字符串*/
        var reg = /deDream/i;
        /*表示不区分大小写匹配含有deDream字符串*/

RegExp对象方法

方法 作用
compile() 编译正则表达式
exec() 检索字符串中指定的值,返回找到儿的值,并确定其位置
test 检索字符串中指定的值,返回true或false
  • compile语法demo

  • /*
    *在字符串中全局搜索子串man,并用person替换。然后通过该方法改变正则表达式,用person替换man或woman
    */
    <script type="text/javascript">
        let str1 = "Every man in the world! Every woman on earth!";
        pattern = /man/g;
        str2 = str1.replace(pattern,"person");
        document.write(str2);
        pattern = /(wo)?man/g;
        pattern.compile(pattern);
        str2 = str1.replace(pattern,"person");
        document,write(str2);
        </script>
  • exec语法demo

    <script type="text/javascript">
        let str = "优秀是一种习惯!";
        let reg = new RegExp("习惯","g");
        let res;
        while((res=reg.exec(str))!=null){
            document.write(res);
            document.write(reg.lastIndex);
        }
        </script>

两种模式

简单模式

通过普通字符的组合来表达的模式

let reg = /code is cool/;

复合模式

通过含有通配符来表达的模式,匹配范围大,灵活性强,挺迟也是常用的模式

let reg = /a+b?\w/;

正则中方括号的含义

表达式 描述
[abc] 查找方括号之间的任何字符
[^abc] 查找任何不再方括号之间的字符
[0~9] 查找任何中0到9的数字
[a~z] 查找任何从a-z的小写字符
[A~Z] 查找任何从A-Z的大写字符

正则中常用字符的含义

符号 含义
/..../ 一个模式的开始和结束
^ 匹配字符串的开始
$ 匹配字符串的结束
\s 任何空白字符
\S 任何非空白字符
\d 匹配一个数字字符,与[0~9]等价
\D 除了数字之外的任何字符,与[^0~9]等价
\w 匹配一个数字字母下划线,与[A~Za~z0~9]等价
\W 任何非单字字符,与[^A~Za~z0~9]等价
. 除了换行之外的任意字符

正则中常用量词的含义

符号 描述 说明
* 出现0次或连续多次 /a*b/可匹配b,aab,aaab...
+ 至少出现一次 /a+b/可匹配ab,aab,aaaab...
? 出现0次或一次 /a[cd]?/可匹配a,,ac,ad
{n} 连续出现n次 /a{3}/相对于aaa
{n,} 连续出现至少n次 /a{3,}/可匹配aaa,aaaaa,..
{n,m} 连续出现至少n次,至多m次 /ba{1,3}/开可匹配ba,baa,baaa,
补充
  • 上述说明中的的量词,主要作用于符号左边的匹配串,比如a*b,是指a出现的吃素可以是0次也可以是多次。
  • a[cd]?中是指cd这个整体中的字符串其中之一至少出现0次或者1次

常用案例

用户名匹配

用户名由英文字母和数字组成的4-16位字符,字母开头

/^[a-zA-Z][a-zA-Z0-9]{3,15}$/

密码匹配

密码由4-10位字符组成

/^[a-zA-Z0-9]{4,10}$/

电话号码匹配

手机号必须为11位数字并且1开头

/^1\d{10}$/

邮箱匹配

邮箱地址必须包含@符号和.符号,并且.符号必须在@之后,邮箱地址以.com或.cn结束

/^\w+@\w+\.\w+[(com)|(cn)]$/

本文在个人博客同步更新

全部评论

相关推荐

昨天 16:33
门头沟学院 Java
本人某中9本科,成绩中等,目前没科研没实习,目前后端学到了javaWeb,开始没定好方向,在学国外课程,走工程路线起步有点晚了,到这个时间点了还在学JavaWeb,顿感迷茫,不知道是坚持走下去还是寒假去准备考研。考研这个路弄得我还是心痒痒的,因为从众考研的人也不在少数,所以会有这方面的心理安慰吧,就是“不行我可以去考研啊”,而且意味着三年的缓冲,为了复试还有积攒经验美化简历,其实现在也可以去申入实验室打杂;就业可能意味着多些工作经验,工程岗应该到后面还是经验大于学历?还是有点迷茫了,求助好心人有无路线启发
千千倩倩:同27给点建议,现在这个时间点可以快速看完外卖和点评,不用跟着敲,但一定要在看的时候总结每个部分的整个业务流程,对其中的实现有一个大概的印象。然后直接开始看八股,刷算法。八股和算法最好还是在项目学习中穿插着看。如果计算机基础,算法这些基础好,加上每天刻苦学习,两周可以达到勉强能面试的水平,到时候就直接海投中小厂,在约面和面试的过程中不断巩固知识。没找到实习也没关系,就当积累经验。再沉淀一波直接明年三月开始投暑期,毕竟是9本,总是有面试机会的,只要你这三个月不懈怠,面试发挥得一定不错,只要拿到一个中,大厂暑期实习,秋招就有竞争力了。总得而言,现在还有机会,但是时间非常紧张,需要你结合自己情况考虑,共勉
你会选择考研还是直接就业
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务