资讯专栏INFORMATION COLUMN

JS 正则(RegExp)

zeyu / 2305人阅读

摘要:返回值是被找到的值。序列匹配,而则匹配。还有关于如何选择一个这里的,转换成文本后,只表示一个就是说这段待执行文本内含一个构建正则思考一下创建正则的几种方式并且多认识一个正则方法匹配前面的子表达式一次或多次。和均为非负整数,其中。

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 = /is/;

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

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

例如, "n" 匹配字符 "n"" " 匹配换行符。序列 "" 匹配 "",而 "(" 则匹配 "("

还有关于如何选择一个

        var str1 = "aaaAAA";            // 这里的,转换成文本后,只表示一个,就是说这段待执行文本内含一个
        console.log(str1);                // "aaaAAA"
        var r = new RegExp(//);         // 构建正则
        console.log(str1.replace(r,"R")); // "aaaRAAA"
思考一下创建正则的几种方式,并且多认识一个正则方法 +:匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +
        var s = "ffffdffffdffffdd";
        
        var r = /d/;                // "Sffffdffffdffffd"
        var r1 = new RegExp("d");    // "Sffffdffffdffffd"
        var r2 = new RegExp(/d/);    // "Sffffdffffdffffd"
        var r3 = new RegExp("d");    // "Sffffdffffdffffd"
        
        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"))
:匹配一个字边界,即字与空格间的位置。(不是空格!!!)
        var reg = /is/;
        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 = /is/g;
   console.log(str.replace(reg,"IS"));     // "He IS a boy. This IS a dog. Where IS she?"
.:除了换行符以外的任意字符。要匹配包括 "n" 在内的任何字符,请使用像"(.| )"的模式。 *:匹配前面的子表达式零次或多次 OR (*前边的内容可以连续重复使用任意次以使整个表达式得到匹配)

例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}

PS:.*连在一起就意味着任意数量的不包含换行的字符

        var str = "ffffdffffd
dfdf";
        console.log(str);        // "ffffdffffd 
                                 // 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,"+"));        // "++&++&++&++&+"            

正则表达式30分钟入门教程

正则表达式语言

正则表达式

正则表达式全部符号解释

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/83157.html

相关文章

  • JS中的正则表达式

    摘要:构造函数可以有两个字符串参数,第一个参数包含正则表达式的主体部分。只读的布尔值,说明这个正则表达式是否带有修饰符。中正则的扩展构造函数在中,只能接受字符串作为参数,允许其直接接受正则表达式作为参数。 上文传送门:初探正则表达式 正则表达式是一个描述字符模式的对象,JavaScript 的 RegExp 类表示正则表达式,String 和 RegExp 都定义了方法,后者使用正则表达式进...

    Soarkey 评论0 收藏0
  • js中与字符串、正则表达式有关的函数

    摘要:直接量语法创建对象的语法参数参数是一个字符串,指定了正则表达式的模式或其他正则表达式。方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。 直接量语法/pattern/attributes 创建 RegExp 对象的语法:new RegExp(pattern, attributes); 参数参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表...

    Null 评论0 收藏0
  • JS正则表达式精简教程(JavaScript RegExp 对象)

    摘要:返回值是被找到的值。支持正则表达式的对象的方法方法检索与正则表达式相匹配的子字符串。该数组是通过在指定的边界处将字符串分割成子串创建的。注意报错正确示例附表修饰符修饰符描述执行对大小写不敏感的匹配。查找以十六进制数规定的字符。 什么是 RegExp? RegExp 是正则表达式的缩写。 当您检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。 简单的模式可以...

    ACb0y 评论0 收藏0
  • JS正则表达式一条龙讲解,从原理和语法到JS正则、ES6正则扩展,最后再到正则实践思路

    摘要:控制权和传动这两个词可能在搜一些博文或者资料的时候会遇到,这里做一个解释先控制权是指哪一个正则子表达式可能为一个普通字符元字符或元字符序列组成在匹配字符串,那么控制权就在哪。 温馨提示:文章很长很长,保持耐心,必要时可以跳着看,当然用来查也是不错的。 正则啊,就像一座灯塔,当你在字符串的海洋不知所措的时候,总能给你一点思路;正则啊,就像一台验钞机,在你不知道用户提交的钞票真假的时候,...

    Michael_Lin 评论0 收藏0
  • 玩转javascript RegExp对象

    摘要:玩转对象中的正则表达式的正则表达式语法极大地借鉴了另一种脚本语言的正则表达式语法对象是的一个内置对象,与,类似。创建对象可通过构造函数创建。当要根据用户输入来构造正则表达式时,必须采用构造函数方式。如与被看做相同的字符模式。 玩转javascript RegExp对象 js中的正则表达式 js的正则表达式语法极大地借鉴了另一种脚本语言Perl的正则表达式语法.RegExp对象是js的一...

    alexnevsky 评论0 收藏0
  • JavaScript正则表达式总结

    摘要:正则表达式一直是里比较难以掌握的点。在中创建正则的两种方式使用字面量这就是正则表达式的字面量语法,表示正则表达式的模式,为正则表达式的标志。字面量形式的正则表达式一般使用较多,也推荐大家尽可能使用这种形式,简洁易读,符合正常的使用习惯。 正则表达式一直是js里比较难以掌握的点。 看不懂,学不会,记不住。 每次需要用到正则的时候,都需要再去查找资料。 今天花时间把正则的知识点总结下,希望...

    big_cat 评论0 收藏0

发表评论

0条评论

zeyu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<