JS 正则(RegExp)

JavaScript RegExp 对象

:测试东西:REGEXPER

经由过程 new 关键词来定义 RegExp 对象。

test()

test() 要领检索字符串中的指定值。返回值是 truefalse

        var r = new RegExp("e");
        var str = "hello world!";
        alert(r.test(str))            // true

exec()

exec() 要领检索字符串中的指定值。返回值是被找到的值。假如没有发明婚配,则返回 null

        var r = new RegExp("e");
        var str = "hello world!";
        alert(r.exec(str));            // "e"

这些是JS RegExp供应的一些要领,简朴引见下;

字面量

        var reg = /\bis\b/;

这就是一个简朴的字面量正则赋值

\:将下一个字符标记为或特别字符、或原义字符、或向后援用、或八进制转义符。

比方, 'n' 婚配字符 'n''\n' 婚配换行符。序列 '\\' 婚配 "\",而 '\(' 则婚配 "("

另有关于怎样挑选一个\

        var str1 = "aaa\\AAA";            // 这里的\\,转换成文本后,只示意一个\,就是说这段待实行文本内含一个\
        console.log(str1);                // "aaa\AAA"
        var r = new RegExp(/\\/);         // 构建正则
        console.log(str1.replace(r,"R")); // "aaaRAAA"

思索一下建立正则的几种体式格局,而且多熟悉一个正则要领

+:婚配前面的子表达式一次或屡次。要婚配 + 字符,请运用 \+

        var s = "dddddddddd";
        
        var r = /d/;                // "Sddddddddd"
        var r1 = new RegExp("d");    // "Sddddddddd"
        var r2 = new RegExp(/d/);    // "Sddddddddd"
        var r3 = new RegExp("\d");    // "Sddddddddd"
        
        var R = /d+/;                // "S"
        var R1 = new RegExp("d+")    // "S"
        var R2 = new RegExp(/d+/);    // "S"
        var R3 = new RegExp("\d+"); // "S"
        //    console.log(s.replace(rX,"S"))

\b:婚配一个字边境,即字与空格间的位置。(不是空格!!!)

        var reg = /\bis\b/;
        var str = "He is a boy. This is a dog. Where is she?";
        console.log(
            str.replace(reg,"IS")
        );
        // "He IS a boy. This is a dog. Where is she?" 
        // 运用replace要领,将根据正则划定规矩挑选到的字符串(... is ...)替代为"IS",然则我们发明只要第一句被替代

只要第一句被替代?引出我们的:

\g:实行全局婚配(查找一切婚配而非在找到第一个婚配后住手)

在一段字符串中,能够存在多少相符正则的挑选,不实行全局g,只会挑选第一个,实行全局g,一切相符的都邑被挑选到。
另一种说法:global可选标志,带这个标志示意替代将针对行中每一个婚配的串举行,不然则只替代行中第一个婚配串

   reg = /\bis\b/g;
   console.log(str.replace(reg,'IS'));     // "He IS a boy. This IS a dog. Where IS she?"

.:除了换行符之外的恣意字符。要婚配包括 ‘n’ 在内的任何字符,请运用像"(.|\n)"的形式。

*:婚配前面的子表达式零次或屡次 OR (*前边的内容能够一连反复运用恣意次以使悉数表达式获得婚配)

比方,zo* 能婚配 “z” 以及 “zoo”。* 等价于{0,}

PS:.*连在一起就意味着恣意数目的不包括换行的字符

        var str = "dddddd\ndfdf";
        console.log(str);        // "dddddd 
                                 // dfdf"        这里文本分列毛病,然则晓得内里存在一个换行符就对了
        var reg = /.*/;                    
        console.log(str.replace(reg,"X"));      // "X
                                                // dfdf"    挑选了换行符前面的恣意字符(这里反复恣意次)

\d:婚配一个数字字符。等价于 [0-9]

\D:婚配一个非数字字符。等价于 [^0-9]

这里要提到一个中括号:

[a-z]:字符局限。婚配指定局限内的恣意字符。比方,'[a-z]’ 能够婚配 ‘a’ 到 ‘z’ 局限内的恣意小写字母字符。(包括自身)

        var str = "a1b2c3d4";
        
        var reg = /\d/;                            // 挑选一个数字字符(罢了)哪怕有更多挑选只挑选第一个碰到的
        console.log(str.replace(reg,"X"));        // "aXb2c3d4"
        reg = /\d/g;                            // 在全局中,挑选数字字符,并返回多个(假如存在)相符划定规矩的字串
        console.log(str.replace(reg,"X"));        // "aXbXcXdX"
        reg = /[a-z]\d/g                        // 一个a-z恣意字符和一个数字字符,并返回多个(假如存在)相符划定规矩的字串
        console.log(str.replace(reg,"X"));        // "XXXX"
        reg = /[a-z]\d/                            // 一个a-z恣意字符和一个数字字符
        console.log(str.replace(reg,"X"));        // "Xb2c3d4"
        // \D 婚配一个非数字字符,与\d相反
        str = "123ABC"
        reg = /\D/;
        console.log(str.replace(reg,"0"));        // "1230BC"
        reg = /\D/g;                            // 一个非数字字符,并返回多个(假如存在)相符划定规矩的字串
        console.log(str.replace(reg,"0"));        // "123000"
        reg = /\D{3}/;                            // 三个一连的非数字字符
        console.log(str.replace(reg,"456"));    // "123456"
        
        // 辨别大小写
        str = "A1B2C3d4"
        reg = /[A-Z]/g;                            // 挑选A-Z大写字母恣意一个,并返回多个(假如存在)相符划定规矩的字串
        console.log(str.replace(reg,"O"))        // "O1O2O3d4"
        reg = /[A-Z]\d/;                        // 挑选A-Z大写字母恣意一个和一个数字
        console.log(str.replace(reg,"O"))        // "OB2C3d4"
        reg = /[A-Z]\d/g;                        // 挑选A-Z大写字母恣意一个和一个数字,并返回多个(假如存在)相符划定规矩的字串
        console.log(str.replace(reg,"O"))        // "OOOd4"

和大括号:

{n}n 是一个非负整数。婚配肯定的 n 次。比方,’o{2}’ 不能婚配 “Bob” 中的 ‘o’,然则能婚配 “food” 中的两个 o。

{n,}n 是一个非负整数。起码婚配n 次。比方,’o{2,}’ 不能婚配 “Bob” 中的 ‘o’,但能婚配 “foooood” 中的一切 o。’o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’。

{n,m}mn 均为非负整数,个中n <= m。起码婚配 n 次且最多婚配 m 次。比方,”o{1,3}” 将婚配 “fooooood” 中的前三个 o。’o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。

?:婚配前面的子表达式零次或一次。比方,”do(es)?” 能够婚配 “do” 或 “does” 中的”do” 。? 等价于 {0,1}

+:婚配前面的子表达式一次或屡次。比方,’zo+’ 能婚配 “zo” 以及 “zoo”,但不能婚配 “z”。+ 等价于 {1,}

另有之前的:

*:婚配前面的子表达式零次或屡次。比方,zo* 能婚配 “z” 以及 “zoo”。* 等价于{0,}

以上5种在正则中被成为限定符,很好明白,限定婚配次数嘛

        var str = "A1234B123C123456";
        
        var reg = /\d{4}/;                        // {4}之前的\d反复婚配4次
        console.log(str.replace(reg,"&"));        // "A&B123C123456"
        reg = /\d{6}/                            // 反复6次
        console.log(str.replace(reg,"&"));        // "A1234B123C&"
        reg = /[A-Z]\d{6}/                        // 一个A-Z恣意字母,和一个一连6个恣意数字
        console.log(str.replace(reg,"&"))        // "A1234B123&"
        
        str = "000&1111&222222&55555555&";
        reg = /\d{4,}/;                            // 一个数字,起码婚配4次
        console.log(str.replace(reg,"——"));        // "000&——&222222&55555555&"
        reg = /\d{4,}/g;                        // (一个数字,起码婚配4次),并返回多个相符划定规矩的婚配串
        console.log(str.replace(reg,"——"));        // "000&——&——&——&"
        reg = /\d{4,6}/g;                        // (一个数字,起码4次,最多6次)
        console.log(str.replace(reg,"——"));        // "000&——&——&——55&"

        reg = /\d?/g;                            // 等价于:{0,1}
        console.log(str.replace(reg,"?"));        // "????&?????&???????&?????????&?"

        reg = /\d+/;                            // 等价于:{1,}
        console.log(str.replace(reg,"+"));        // "+&1111&222222&55555555&"
        reg = /\d+/g;                            
        console.log(str.replace(reg,"+"));        // "+&+&+&+&"
        
        reg = /\d*/g;
        console.log(str.replace(reg,"+"));        // "++&++&++&++&+"            
    原文作者:Queen
    原文地址: https://segmentfault.com/a/1190000009551689
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞