• 20140829分享正则大纲


    1, 正则符号

    ^ 开头,  [^]非

    $字符结尾(每行)

    转义

    .匹配除 外其他词

    ?前面0次或者1次

    *前面的0+次

    {n} n次

    {n,} n+次

    {n,m} n-m次

    | 或

    [123][0,3]集合 , [123]匹配123是不成立

    [1-3][a-z][A-Z]集合范围

    [^123][^a-z]集合非

    d 0-9

    D 非数字

    s 空,包含f v

    S 非空

    ()分组

    2, 正则的组成

    /正则/修饰符

    new RegExp('正则', '修饰符');

    修饰符: 

    i不区分大小写   

    g全局

    m多行(开启的话^$以每行为目标)

    3, 组合

    ^1[3-8]d{9}$

    ^d{7}$ 7位数

    ^(d{4})?d{7}$ 加4位区号

    ^(d{4}-?)?d{7}$ 加4位区号 -

    ^(0d{3}-?)?d{7}$  前面必须是0 

    ^((0d{3}-?)?d{7}|(0d{2}-?)?d{8})$ 3位区号

    ^(((d{3}-)?[1-9])|((0d{2}-)?[1-9]d))d{6}$ 3 4   //不正确,例子

    4, 贪婪

    1(.*)?0   => 10, 110, 100

    1(.*?)0 => 132323230, 1超大规模fsdfsdf0

    去注释:

    <!--([sS]*?)-->

    //(.*?)$

    去标签:

    </?([a-zA-Z]+?)>

    5, 断言/预查/非捕获 

    ?: 非捕获

    ?= 正向判定

    ?! 正向否判定

    ?<= 反向判定 (js不支持)

    ?<! 反向否判定(js不支持)

    1, 非捕获

    (?:d)[a-zA-Z]+ //数字的那组将不会被后续捕获,通常用在match,exec上, 非捕获在某种程度上可以提高性能

    2, 必须是字母+数字

    ^(?!d+$)(?![a-zA-Z]+$)[0-9A-Za-z]{1,}$

    =>转换成

    ^

        (?!d+$) //不是以全数字结束

        (?![a-zA-Z]+$) //不是以全字母结束

        [0-9A-Za-z]{1,} //数字+字母1位以上

    $

    3, 必须包含@的字母或数字

    ^(?=.*@.*)[0-9A-Za-z@]{2,}$

    4, 必须包含@, 但不能开头和结束

    ^(?=.*@.*)(?!^@(.*))(?!(.*)@$)[0-9A-Za-z@]{2,}$

    =>

    ^

                (?=.*@.*) //必须包含@
                (?!^@(.*)) //不能以@开头
                (?!(.*)@$) //不能以@结束
                [0-9A-Za-z@]{2,} //有@的2位以上字母或数字

    $

    6, 正则的方法

    test 验证是否可以匹配

    exec 同string.match差不多, 但据说有区别

    /reg/.test(value)

    /reg/ig.exec(value)

    string.match(/reg/g)

    string.split(/reg/)

    7, 场景应用

       

    1,采集图片路径: (js php思路一致)

            var str = '把页面全部源代码抓来fffdsfsd<img src=1>fsdfsd<img alt= src=2 width=323>fsdf';
            var arr = str.match(/<imgs+[^>]+?>/g) || [];//先把全部图片标签抓过来
            arr.forEach(function(val){//遍历所有的结果,这里val就拿到了每个图片的标签str
                var str = val.match(/src=['"]?(.+?)['"]?/) || ['', ''];
                alert(str[1]);

    });

    2, 密码复杂度

            var pass = 'fsdfsdf';
            var arr = pass.match(/^(?:(d+)|([a-z]+)|([A-Z]+)|([a-zA-Z]+)|([a-zA-Z0-9]+))$/);
            arr[0]//总结果
            arr[1]//纯数字
            arr[2]//纯小写字母
            arr[3]//纯大写字母

  • 相关阅读:
    四则运算实现
    第四周例行报告
    代码规范,结对要求
    第三周例行报告
    第三周作业3功能测试
    第二周例行报告
    第一次作业汇总
    2017/2/24:Maven的pom jar war的区别
    oracle的常用99条语句
    2017/2/21:配置自己的中文乱码拦截器
  • 原文地址:https://www.cnblogs.com/sunshq/p/3958357.html
Copyright © 2020-2023  润新知