• JavaScript 正则表达式学习


    本文主要内容是本人学习正则的记录,包括最基本的概念及基本的应用。

    一直想学习正则表达式,但又被看不懂的火星文一次次吓到,终于静下心来从零学习,其实学进去,明白一些正则的规则,其实也没有想象中的那么可怕。

    总体来说这次的学习正则的最基本的要求已实现,但是自己内心里还是很清楚的明白,自己只是学习一点点而已,能总结的也只是部分,网上前辈总结的很多,也很全面,这里就记录一下我的学习记录,以便后面再学习回忆,如有错误,请指正。

    下面将直接贴出代码:

    <script type="text/javascript">
            $(function(){
                
                // ***************************************************************************************//
                // test方法,测试字符串,符合模式时返回true,否则返回false 
                // ***************************************************************************************//
                var re = /he/;        //含有 he 字符的  
                //var re = new RegExp(/he/);
                var s = "he";
                //console.log(re.test(s)); //true
                //var s1 = "He";
                //console.log(re.test(s1)); //false
                
                //var re1 = /he/i;            //如果要大小写都匹配可以指定i标志(i是ignoreCase或case-insensitive的表示) 
                //console.log(re1.test(s1)); //true
                
                s = "hi ,she is a pretty girl!";
                
                //console.log(re.test(s)); // true 
                
                //  ^
                re = /^he/            // 以he开头的字符串 
                //console.log(re.test(s)); //false
                
                s = "he is a pretty girl!";
                //console.log(re.test(s)); //true
                
                s = "He is a pretty girl!";
                //console.log(re.test(s)); //false
                
                //console.log(/he/i.test(s)); //忽略大小写 
                
                // $
                re = /he$/i;   //$表示字符结束位置 /he$/i 表示忽略大小写且以he结尾 
                
                //console.log(re.test("he is")); //false
                
                //console.log(re.test("he")); //true
                
                //console.log(re.test("he ")); //false
                
                //console.log(re.test("rHE"));//true
                
                // s
                
                re = /s/; //s匹配任何空白字符,包括空格、制表符、换页符等等  
                s = "she is";
                //console.log(re.test(s));//true
                //console.log(re.test("sheis")); //false
                //console.log(re.test("she    is"));//true  中间是制表符 tab键
                
                re = /[a-z]/ ;//[]匹配指定范围内的任意字符,这里将匹配英文字母
                s = "beauty";
                //console.log(re.test(s));//true
                
                //console.log(re.test("Beauty")); //true
                
                re = /^[a-z]/ ;//匹配a-z的字母,这里是小写字母,必须是开头 
                //console.log(re.test("Beauty")); //false
                
                re = /^[a-z]/i;  //不区分大小写,以字母开头
                //console.log(re.test("beauty")); //true
                //console.log(re.test("Beauty")); //true
                //console.log(re.test("12Beauty"));//false
                
                re = /[A-Z]/;  //匹配A-Z的字母,这里是大写字母 
                //console.log(re.test("abc"));//false
                //console.log(re.test("Abc"));//true
                
                re = /[A-Z]/i
                
                //console.log(re.test("12Bs")); //true
                
                re = /^[A-Z]/i
                //console.log(re.test("12Bs"));//false
                
                //console.log(re.test("Ab12c4")); //true
                
                re = /d/;   //匹配数字 0-9,字符串中含有数字即可 
                //console.log(re.test("sdf")); //false
                //console.log(re.test("1223")); //true
                //console.log(re.test("12w12ew")); //true
                
                re = /^[a-z]+s+d+$/i ; //表示 以小写字母开头,s表示空格 ,d 表示 数字,+ 表示至少出现一次,i 表示忽略大小写 
                s = "jdk 7";
                //console.log(re.test(s));//true
                
                // ***************************************************************************************//
                // 另一个方法exec,返回一个数组,数组的第一个元素为完整的匹配内容  
                // 注意,当字符串不匹配re时,exec方法将返回null
                // ***************************************************************************************//
                var arr = re.exec(s);
                //console.log(arr.length); // 1
                //console.log(arr[0]); // jdk 7
                
                re = /d/; //输出是那个字符匹配了正则的模式 
                var arr = re.exec(s);
                //console.log(arr.length); // 1
                //console.log(arr[0]); // 7
                
                s = "jdk 7 8";
                arr = re.exec(s);
                //console.log(arr.length); //1
                //console.log(arr[0]); // 7 这里还是7,其实我想把数字都输出,怎么玩?
                
                re = /^[a-z]+s+(d+)$/i;
                s = "jdk 7";
                
                arr = re.exec(s);
                //console.log(arr.length); // 2
                //console.log(arr[0]); // jdk 7
                //console.log(arr[1]); // 7
                
                re = /^[a-z]+s+(d+).(d+)$/i; // 这里要说明的是 . 是什么意思, .在正则里是元字符之一,要使用.的本意, 需要转译才可使用,正则里有那些元字符? ( [ {  ^ $ | ) ? * + .  
                s = "jdk 7.8";
                arr = re.exec(s);
                //console.log(arr.length); //3
                //console.log(arr[0]); // jdk 7.8
                //console.log(arr[1]); // 7
                //console.log(arr[2]); // 8
                
                re = /^[a-z]+s+(d+)+s+(d+)$/i; //这里就解决了上面的那个问题 ^_^!
                s = "jdk 7 8";
                arr = re.exec(s);
                //console.log(arr.length);// 3
                //console.log(arr[0]); // jdk 7 8
                //console.log(arr[1]); // 7
                //console.log(arr[2]); // 8
                
                // ***************************************************************************************//
                // 关于字符串的操作 
                // 1、s.replace(regexp, replaceValue) 第一个参数 可以是正则表达式 第二个参数是被替换的字符        //
                // ***************************************************************************************//
                
                s = "some thing";
                re = /s/;
                //console.log(s.replace(re, "-")); //some-thing
                //console.log(s.replace(re,"")); //something
                
                s = "some  thing is"; //里面有两个空格 
                re = /s+/;
                //console.log(s.replace(re, "*")); //some*thing is
                
                re = /s+/g;   // g 是什么意思? g是全局标志,将使正则表达式匹配整个字符串
                //console.log(s.replace(re, "*")); //some*thing*is
                
                s = "some thing is";
                re = /s/;
                //console.log(s.split(re)); // ["some", "thing", "is"]
                
                s = "ab+c_s-d";
                re = /[^a-z]/i;  //注意这里的 [^a-z]与^[a-z]的区别 
                //console.log(s.split(re)); //["ab", "c", "s", "d"]
                
                s = "ab+c_s-d+ABc+Sb";
                //console.log(s.split(re));  //["ab", "c", "s", "d", "ABc", "Sb"]
                
                s = "ab+c_s-d+ABc+Sb*ds&012%e";
                //console.log(s.split(re));    //["ab", "c", "s", "d", "ABc", "Sb", "ds", "", "", "", "", "e"]
                //上面三组比较有意思,看出来区别了 ,^[a-z] 表示的是 以a-z字母开头 [^a-z] 表示取 a-z的补集 ,前辈说是表示一个负字符集,什么是负字符集? 
                
                
                //search(regexp) 返回查找到的字符串开始下标  当search方法没有找到匹配时,将返回-1 
                s = "jdk 7";
                re = /d+/;
                //console.log(s.search(re)); // 4 
                s = "jdk 7";
                re = /d+/g;  //
                //console.log(s.search(re)); // 4 ,我感觉g标志是多余的
                
                //match()
                s = "My name IS JAck!";
                re = /[A-Z]/;
                arr = s.match(re);
                //console.log(arr.length);  // 1
                //console.log(arr[0]); //M
                
                re = /[A-Z]/g;
                arr = s.match(re);
                //console.log(arr.length);  // 5
                //console.log(arr);   //["M", "I", "S", "J", "A"]
                
                re = /[a-z]/i; //将[a-z]字符串输出  
                //console.log(re.source);
                
                re = /d/;
                //console.log(re.source);
                
                //s = "aghf12";
                //console.log(re.test(s));
                
                re = /w/;
                s = "*12**";
                //console.log(re.test(s));
                
                var html = "<p><a href='http://www.cnblogs.com/rubylouvre/'>Ruby Louvre</a>by <em>司徒正美</em></p>";
                //var text = html.replace(/<(?:.|s)*?>/g, "");
                //alert(text)
                re = /<[^<>]+>/g; // 除去 标签,获取标签内的内容 
                
                //alert(html.replace(re,''));  //Ruby Louvre  司徒正美
                
                s = "yulu359864900@163.com";
                //验证邮箱,首先@前是由字母、数字、下划线组成,@后是数字、字母,然后. .后是cn或者com等,必须是字母,且位数2到4为
                re = /^w+@[0-9a-z]+.[a-z]{2,4}$/;   
                // 注意这里的行首^ 行尾$   ^在[]外表示行首,在[]内表示非,交集
                //alert(s+" : "+re.test(s));
                
                s = "13538205813";
                // 手机号 第一位是1,这个是必须的,第二位 有 3、5、8,就这三个数字,第三位到第十一位0-9,共十一位 
                re = /^1[358]d{9}$/g;
                
                // 注意这里{},{9}表示长度是9,d{9}表示数字的长度必须是9,也就是有9个数字
                // 刚才写成这个样子,d+{9},然后报了错,
                // +号是什么意思呢? 其实 + 可以写成{1,} 表示出现1次或者任意次
                // {9} 表示 出现的次数是9,也就是长度是9
                // {9,} 表示 出现的次数字是9,没有上限的次数  >=9
                // { ,9} 表示 出现的次数对多是9,没有下限 <=9
                // * 可以写成{0,},表示任意次,出现的次数任意 
                // ? 可以写成{0,1} ,表示出现的次数是0次或者1次 
                // 正则报错是不给提示的,所以谨记 
                
                //alert(re.test(s));
                
                s = "359864900";
                // QQ 号码 共5到12位,第一位不能为0,剩下的几位为0-9任意数字 
                re = /^[1-9]d{4,11}$/;
                //alert(re.test(s));
                
                s = "你好说的dsdsd";
                re = /[u4e00-u9fa5]+/g;
                // 校验 字符串中是否含有中文 
                // re = /[u4e00-u9fa5]/  用于匹配单个汉字。
                // utf-8编码 u4e00 是utf-8编码顺序中的第一个汉字,u9fa5表示最后一个汉字
                //alert(re.test(s));  [^u4e00-u9fa5]
                
                s = "  [a b c]  ";
                re = /s+/g; //去掉所有空格 
                
                //alert(s.replace(re,'')); //abc
                
                re = /^s+/g; //去掉前面的空格 
                //alert(s.replace(re,'')); //a b c
                
                re  = /s*$/g;
                //alert(s.replace(re,''))            
                
                re = /^s*|s*$/g;
                
                alert(s.replace(re,''));
                
                // ***************************** 小结 **********************************************************//
                // 正则表达式 基本都是perl方式。
                // var re = /he/;  等价于  var re = new RegExp(/he/); 习惯使用前者的写法 
                //
                //.   任意字符,表示什么都可以表示,数字、字母、空格等
                // d [0-9]digital 数字
                // D [^0-9]除了0-9
                // w word 表示[0-9a-z_]
                // W [^0-9a-z_]
                // s space 表示空格 空白
                // S 表示除了空格空白之外的所有东西
                // g global 全局  i ignore 忽略大小写  平时的写法可以 gi 或者 ig 
                // search(re) 字符串搜索,返回匹配的出现的位置
                // match(re) 获取匹配的项目,如找出所有数字 
                // test("abc") 根据正则匹配,看是否符合 匹配规则 符合 true 否则 false 
                //    ( [ {  ^ $ | ) ? * + .   正则的元字符 
                // [] |就是或的意思,和 []意思一样,凡是出现在[]中的都是或的范围之内的
                // (1|2|3|4) 可以写为[1234]
                // 区分 ^[0-9] 与 [^0-9] 前者表示 以数字0-9开头,后者表示 以除了0-9任意字符开头 
                // ^ 与 $ 前者表示以此开头,后者表示以此结尾 
                // ***************************************************************************************//
            });
        
        </script>

       参考资料:

      JavaScript正则表达式

      精通 JavaScript中的正则表达式

      正则表达式速查表

  • 相关阅读:
    C++---const
    qt--textEdit多行文本编辑框
    qt--QByteArray字节数组
    qt5--拖放
    qt5--自定义事件与事件的发送
    qt5--键盘事件
    qt5--鼠标事件
    qt5-事件过滤器
    qt5-event事件的传递
    qt-事件的接受和忽略
  • 原文地址:https://www.cnblogs.com/yangh965/p/5949782.html
Copyright © 2020-2023  润新知