• _JavaScript简单入门——正则表达式


    好久没发博客了,主要是懒得写,写博客是不是一种负担,而是一种改用的时候就拿来用的工具

    而这一次写的原因是,这几天学了JavaScript的正则表达式的使用,

    信息量有点大,所以昨天差不多用了半天的时间进行内容回顾,翘代码实际操作加深印象

    一天回顾下来,原本各种弄混,概念不清晰,现在应该是有自信用好正则表达式的,挺有用的

    具体就不多加解释了,我觉得下面源码里面的一大坨注释应该看起来还是浅显易懂的

    用console.log()显示控制台输出,类似python的print()和C的printf(),该行后面的注释里面有控制台输出结果

    Part 1  正则表达式的创建与检查

     1 <!DOCTYPE html> 
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title>正则表达式的创建与检查</title>
     6     </head>
     7     <body>
     8         <script>
     9             /*  正则表达式用来定义一些字符串的规则
    10                 计算机可以根据正则表达式,来检查一个字符串是否符合你想要的规则
    11                 也可以获取将字符串中符合规则的内容提取出来 */
    12             
    13             // 创建正则表达式的对象
    14             var reg1 = new RegExp("a","i");     // 语法:var 变量 = new RegExp("正则表达式","匹配模式");
    15                                                 // 检查一个字符串中是否含有字符串"a",第二个参数"i"表示检查可以忽略大小写
    16                                                 // 第二个参数也可以为"g"表示全局检查,就是有些只是检查到第一处符合条件就会停下
    17                                                 // 使用全局检查后,可以对字符串全局检查,从头检查到尾
    18             console.log("csl_1 = "+typeof(reg1));       // csl_1 = object   使用typeof检查正则对象,会返回object
    19             
    20             // 正则表达式的方法:test()
    21             // 使用这个方法可以用来检查一个字符串是否符合正则表达式的规则,符合为true,否则为false
    22 
    23             var str1 = "abcdefg";       // 被检查的字符串
    24             var result1 = reg1.test(str1);      // 检查是否符合正则表达式
    25             console.log(result1);       // true
    26             str1 = "bcd";       // 修改字符串str1
    27             console.log(reg1.test(str1));       // false
    28             str1 = "Ace";
    29             console.log(reg1.test(str1));       // true,忽略大小写(上文提到的"i")
    30         
    31             // 使用字面量来创建正则表达式,语法:var 变量 = /正则表达式/匹配模式
    32             // 使用字面量的方式创建更加简单,而使用构造函数创建更加灵活,上文中用的就是构造函数创建
    33             var reg2 = /a/i;        // a为检查字符串中是否含有"a",i为忽略大小写
    34             console.log(typeof reg2);       // object
    35             console.log(reg2.test("abc"));      // true
    36 
    37             // 创建一个正则表达式检查一个字符串中是否含有字母a或b或c
    38             var reg3 = /a|b|c/;
    39             console.log(reg3.test("abc"));      // true
    40             console.log(reg3.test("arduino"));      // true
    41             console.log(reg3.test("boy"));      // true
    42             console.log(reg3.test("dog"));      // false
    43         
    44             // 上面的reg3写的有点难看,用比较好看的写法
    45             // []里的内容也是或"|"的关系,如:[ab] == a|b;
    46             // [a-z]表示任意小写字母;[A-Z]表示任意大写字母;[A-z]表示任意字母;[0-9]表示任意数字
    47             reg3 = /[a-c]/;     // 上文中reg3的另一种写法,用来检查是否含有 a或b或c
    48             console.log(reg3.test("evening"));      // false
    49             console.log(reg3.test("affternoon"));       // true
    50             // 一些尝试
    51             var reg4 = /abc/;       // 这个和上面的reg3不一样,
    52                                     // 这个不是检查有a或b或c,而是检查是否含有字符串"abc"
    53             console.log(reg4.test("cba"));      // false
    54             console.log(reg4.test("abcd"));     // true
    55             var reg5 = /a[bcd]e/;       // 这个检查的字符串规则为:a开头,e结尾,中间只有一位字母,b或c或d
    56             console.log(reg5.test("ace"));      // true
    57             console.log(reg5.test("abc"));      // false
    58             console.log(reg5.test("abcde"));        // false
    59         
    60             // [^]除了,[^a]除了a,含有其他字符为true,否则为false,[^ab]除了a和b以外,含有其他字符为true,否则为false
    61             var reg6 = /[^ab]/;
    62             console.log(reg6.test("ababab"));       // false
    63             console.log(reg6.test("abc"));      // true
    64             console.log(reg6.test("alive"));        // true
    65             console.log(reg6.test("cute"));     // true
    66             var reg7 = /[^0-9]/;        // 检查字符串中除了数字外是否含有其他字符,有为true,无为false
    67             console.log(reg7.test("1433223"));      // false
    68             console.log(reg7.test("aa13a3a2a3a3"));     // true
    69             console.log(reg7.test("morning"));      // true
    70         </script>
    71     </body>
    72 </html>

    Part 2  作为参数时的正则表达式

     1 <!DOCTYPE html> 
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title>作为参数的正则表达式</title>
     6     </head>
     7     <body>
     8         <script>
     9             // 正常表达式除了可以用来检查字符串规则,还可以用来作为参数传递到某些方法内
    10             // 如str.split(),str是字符串,之前常用的是str.split(","),通过逗号将字符串拆分成数组
    11             // 这里另外一种写法为str.split(/,/);这个方法不用指定全局匹配,也会全都拆分
    12             var str2 = "aa13a3a2a3a3";
    13             var array1 = str2.split(/a/);       // 通过字母a将字符串拆分成数组
    14             console.log(array1);        // (7) ["", "", "13", "3", "2", "3", "3"]
    15             var str3 = "http://1www2.bilibili3.com";
    16             var array2 = str3.split(/[0-9]/);
    17             console.log(array2);        // (4) ["http://", "www", ".bilibili", ".com"]
    18             
    19             // 除了split方法外,再介绍下search(),可以搜索字符串中是否含有指定内容
    20             // 如果搜索到,则返回第一次出现的索引,否则返回-1,同样也可以接受一个正则表达式作为参数
    21             // search()只会查找第一个,计算设置全局也没用
    22             var str4 = "hello world,good morninig";
    23             console.log(str4.search(/[ ,]/));       // 空格和逗号,返回5
    24             
    25             // match()会将匹配到的内容封装到一个数组中返回
    26             // 默认情况下match()只会找到第一个符合要求的内容,找到后就会停止检索
    27             // 这时我们可以给正则表达式设置全局匹配模式,这样就会匹配到所有的内容
    28             // 可以尾一个正则表达式设置多个匹配模式,顺序怎样都无所谓,如下文正则表达式后面第二个/后面
    29             // 无论是ig或是gi,效果都一样,都是全局加上忽略大小写
    30             var reg8 = /[a-z]/;
    31             var str5 = "1a2b3c4d5e6f7";
    32             console.log(str5.match(reg8));      // ["a", index: 1, input: "1a2b3c4d5e6f7", groups: undefined]
    33             // 上面只检查到第一个符合正则表达式的a,就停止检索,若要检查全部,则进行如下操作
    34             reg8 = /[a-z]/gi;
    35             str5 = "1a2b3c4d5e6f7G8H9";     // 现在还加入了大写字母
    36             console.log(str5.match(reg8));      // (8) ["a", "b", "c", "d", "e", "f", "G", "H"]
    37                                                 // 0: "a"   // 1: "b"   // 2: "c"   // 3: "d"
    38                                                 // 4: "e"   // 5: "f"   // 6: "G"   // 7: "H"   // length: 8
    39                                                 
    40             // replace()可以将字符串中指定内容替换为新的内容
    41             // 可以将字符串中指定的内容替换为新的内容
    42             // replace()参数:参数1:被替换的内容,可接受正则表达式;参数2:新的内容
    43             // 可以给正则表达式设置全局匹配模式
    44             var str6 = "1a2b3c4d5e6f7";
    45             var reg9 = /[A-z]/;
    46             console.log(str6.replace(reg9,"-@w@-"));      // 1-@w@-2b3c4d5e6f7
    47             reg9 = /[A-z]/g;        // 设定全局检查
    48             console.log(str6.replace(reg9,"-@w@-"));      // 1-@w@-2-@w@-3-@w@-4-@w@-5-@w@-6-@w@-7
    49         </script>
    50     </body>
    51 </html>

    Part 3  正则表达式的量词与开头结尾设置

     1 <!DOCTYPE html> 
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title>正则表达式的量词与开头结尾设置</title>
     6     </head>
     7     <body>
     8         <script>
     9             // 通过量词,正则表达式可以设置一个内容出现的次数
    10             var reg10 = /a{3}/;     // 表示a连续出现3次,与/aaa/意思相同
    11             var str7 = "aaaaaaah";
    12             console.log(reg10.test(str7));      // true
    13             str7 = "abaabb";
    14             console.log(reg10.test(str7));      // false
    15 
    16             // {m,n}正好连续出现m到n次
    17             // 同理{m,}表示连续出现m次以上;{,n}表示连续出现n次以下
    18             var reg11 = /a{2,3}/;       // 表示a连续出现2次或3次
    19             var str8 = "abcd";
    20             console.log(reg11.test(str8));      // false
    21             str8 = "aaabcd";
    22             console.log(reg11.test(str8));      // true
    23             str8 = "aabcd";
    24             console.log(reg11.test(str8));      // true
    25             reg11 = /a{2,}/;        // 连续出现2次或2次以上
    26             console.log(reg11.test(str8));      // true
    27             reg11 = /a{,1}/;        // 连续出现1次即1次以下,即0或1次
    28             console.log(reg11.test(str8));      // false
    29             // 还有其他写法,如/a+/;    表示连续出现1次或1次以上,即/a{1,}/;
    30             // 如/a*/;  表示0个或者多个,即/{0,}/;
    31             // 如/a?/;  表示0个或者1个,即/{0,1}/;
    32 
    33             // 检查字符串的开头或结尾
    34             // ^ 表示开头,如 reg = /^a/;   匹配开头的a
    35             // $ 表示结尾,如 reg = /a$/;   匹配结尾的a
    36             var reg12 = /^a$/;
    37             console.log(reg12.test("a"));       // true     以a开头,以a结尾
    38             console.log(reg12.test("aaa"));     // false    虽然也是以a开头,以a结尾,但是就是不行,索引地址必须相同
    39             console.log(reg12.test("abcba"));       // false
    40             reg12 = /^a|a$/;        // 以a开头或者以a结尾
    41             console.log(reg12.test("aaa"));     // true
    42             console.log(reg12.test("abcba"));       // true
    43         </script>
    44     </body>
    45 </html>

    Part 4  正则表达式的转义符与元字符

     1 <!DOCTYPE html> 
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title>正则表达式的转义符与元字符</title>
     6     </head>
     7     <body>
     8         <script>
     9             // 检查一个字符串中是否含有.
    10             // .表示任意字符
    11             var reg13 = /./;
    12             console.log(reg13.test("www.baidu.com"));       // true
    13             console.log(reg13.test("1433223"));     // true
    14             // 从上面实验中,发现不能直接用/./检查字符串中是否含有.
    15             // 所以,这个时候我们可以用转义符
    16             // 用.来表示.
    17             reg13 = /./;
    18             console.log(reg13.test("www.bilibili.com"));        // true
    19             console.log(reg13.test("1433223"));     // false
    20             // 关于的表示,可以用\表示
    21             // 关于\的表示,可以用\\表示\
    22             reg13 = /\/;
    23             str9 = "D:\Python\python_study";
    24             console.log(reg13.test(str9));      // true
    25 
    26             // 正则表达式中的元字符
    27             // w元字符用于查找单词字符;            W与w相反,查找非单词字符
    28             // d元字符用于查找数字[0-9];           D与d相反,查找非数字
    29             // s元字符用于查找空格;                S与s相反,查找非空格
    30             // 元字符用于查找单词边界;            B与相反,查找非单词边界
    31             var reg14 = /w/;       // 字符串中含有字母或数字或下滑线时为true,否则为false
    32             console.log(reg14.test("will"));        // true
    33             console.log(reg14.test("!@#$%&"));      // false
    34             var reg15 = /d/;       // 字符串中含有数字时为true,否则为false
    35             console.log(reg15.test("abcd"));        // false
    36             console.log(reg15.test("13a2a3a3"));        // true
    37             var reg16 = /s/;       // 字符串中含有空格时为true,否则为false
    38             console.log(reg16.test("hello world"));     // true
    39             console.log(reg16.test("helloworld"));      // false
    40             var reg17 = /apple/;        // 字符串中含有规定的单词时(apple)为true,否则为false
    41             console.log(reg17.test("I have an apple"));     // true
    42             console.log(reg17.test("I have a pen"));        // false
    43             console.log(reg17.test("Ah applepen"));         // false,虽然含有apple,但是里面是applepen不是apple
    44         </script>
    45     </body>
    46 </html>

    最后想说

    我学JS的链接:https://www.bilibili.com/video/BV1YW411T7GX?p=85

    想更深刻地理解的话前往:https://www.w3school.com.cn/jsref/jsref_obj_regexp.asp

    突然穿插一期JavaScript的介绍确实有点乱了章程,上一期还在写CSS3来着

    本来想继续写CSS3的,但是当我的CSS定位写到一半时,发现写的东西有点浅的过头了

    CSS3定位学的时候印象还是挺深刻的,但是隔了好久没用,就忘的有点多,不是很适合写随笔

    现在CSS定位的随笔还保存在草稿箱中,等后来某一天有空回过头去重温CSS的使用,再去继续写随笔

    所以本篇随笔可能对JS零基础的看起来会有点难受,有别的语言的编程基础的应该多少是能看的懂的

  • 相关阅读:
    Linux内核的ioctl函数学习
    两个VLC实现播放串流测试
    嵌入Linux启动配置文件
    Qt/Embedded中使用jpeglib
    Flex中使用TabBar ViewStack 控件不加载问题
    Flex 特殊字符及转义符
    undefined reference to `jpeg_std_error(jpeg_error_mgr*)
    OK6410预览并实现截图操作(RGB565)
    C# 工具条控件设置背景色去除边框
    TeamFoundation Server 使用技巧
  • 原文地址:https://www.cnblogs.com/yuange1433223/p/13123508.html
Copyright © 2020-2023  润新知