正则表达式--初识

前言

    虽然工作四五年了,都没怎么使用过正则,但是它一直都是我心中的一个痛,尤其是我月初手写webpack-loader完成项目需求时,使用了大量的字符串的find、replace等操作,这让我再一次存在这样的疑问:如果是正则,会不会更好?

元字符

    ^、$、.、*、+、?、|、\、/、(、)、[、]、{、}、=、!、:、-

横向匹配与纵向匹配

    横向匹配

        一般字符值是确定的,但是该字符出现的个数不确定,比如ab、abb、abbb、abbb...b中,b出现的次数不确定

        代表字符:

            {}:具体指定出现次数

            ?:0|1次

            +:>=1次

            *:>=0次

    纵向匹配

        一般针对某一个字符做限定,如ab、ac、ad、af中,b的值不确定

        代表字符:

            .:通配符,表任意字符

            -:范围

            []:具体指定可选值

            ^:排除(仅用在[]时)

            \d:数字

            \w:数字|字母|下划线

            \s:空白符,如空格、水平制表符、垂直制表符、换行符、回车符、换页符等

            \D|\W|\S:上述小写取反

贪婪与惰性

    贪婪

        按最大范围匹配

    惰性

        按最小范围匹配,使用?标识

分支

    标识符

        |

        一般与()搭配使用

修饰符

    g:后一次匹配从上一次匹配成功的下一个位置开始

    m:多行匹配

    i:忽略大小写

优先级

    \ ()或[]  {}或*或?或+  ^或$或字符字面量  |

示例

    取任意字符

        [^]

    取除了abc外的

        [-ac]

    匹配十六进制颜色值

        分析:

            十六进制以“#”开头,但是并不能使用^,因为这代表整个字符的开头

            除了#外,其余字符为数字和字母,但是下划线不行,故为[\da-fA-F],且需要使用()与#隔开

            颜色值可以是3位也可以是6位,故需要使用分支:|     

        结果:

    配送时间--24小时制

        分析:

            若时的十位为2时,时的个位只能为0、1、2、3

            分的十位最高取到6

            涉及两种情况,需要使用|+()

        结果:

    匹配日期

        分析:

            和时间一样,主要分析出分支

            [0-38]代表的是0、1、2、3和8,而不是0到38

        结果:

    匹配文件路径

        分析:

            盘符可以是任意的大小写字母,对于冒号而言,我不确定需不需要转译,那就转译准没错

            剩下的文件夹,分两种情况:

                如果是最后一个,则没有\,且要么有要么没有

                如果不是最后一个,则一定有\,且为0或多个

                虽说是两种情况,但这里并不是分支的概念

        结果:

    匹配id

        分析:

            使用.可以匹配任意字符,为空的不要,故为.+

            但是.也会匹配引号,故想要进行贪婪,匹配到右引号即停止

            ?是对匹配结果进行贪婪,而非前一个,如.+?“标识对任意字符匹配到问号为止,而不是对+

         结果:



参考

你可能感兴趣的:(正则表达式--初识)