首页 > 代码库 > JavaScript 正则表达式学习

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.mamicode.com/‘http://www.cnblogs.com/rubylouvre/‘>Ruby Louvreby 司徒正美

"; //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中的正则表达式

JavaScript 正则表达式学习