<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
    <title>JS正则表达式学习</title>
    <script type="text/javascript">
                           
        (function(){
                           
            /*
                RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。
                                   
                1:直接量语法 /pattern/attributes
                                   
                2:创建 RegExp 对象的语法:new RegExp(pattern, attributes);
                                   
                3:参数
                (1)参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
                                   
                (2)参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",
                分别用于指定全局匹配、区分大小写的匹配和多行匹配。
                ECMAScript 标准化之前,不支持 m 属性。
                ★如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。★
                                   
                                   
                4:返回值
                一个新的 RegExp 对象,具有指定的模式和标志。
                如果参数 pattern 是正则表达式而不是字符串,
                那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。
                如果不用 new 运算符,而将 RegExp() 作为函数调用,
                那么它的行为与用 new 运算符调用时一样,
                                   
                只是当 pattern 是正则表达式时,它只返回 pattern,而不再创建一个新的 RegExp 对象。
                                   
                5:抛出
                (1)SyntaxError - 如果 pattern 不是合法的正则表达式,
                或 attributes 含有 "g"、"i" 和 "m" 之外的字符,抛出该异常。
                (2)TypeError - 如果 pattern 是 RegExp 对象,
                但没有省略 attributes 参数,抛出该异常。
                                   
                6.说明:
                ★ 由于我们用new RegExp()对象时,有些字符串需要转义,所以一般我们用“直接量语法”
                eg:
                var reg = /\d+/;
                var reg = new RegExp("\\d+");  //需要转义比较麻烦
            */
                               
                           
        /*
            ★1.test()方法:test() 方法用于检测一个字符串是否匹配某个模式.
                               
            语法:RegExpObject.test(string)
                               
            如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false。
                               
            eg:
                           
        var reg = /\d+/; //表示必须含有数字
        var value1 = "123";
        var value2 = "abc";
        var v3 = "a2c";
        alert(reg.test(value1)); //true
        alert(reg.test(value2)); //false
        alert(reg.test(v3)); //true
        */
                           
        /*
            2.^n : ^n 量词匹配任何开头为 n 的字符串。
            eg:
                           
        var reg = /^\d+/; //表示任何开头必须为数字
        var v1 = "123abc";
        var v2 = "abc123";
        alert(reg.test(v1)); //true
        alert(reg.test(v2)); //false
        */
                           
        /*
            3.n$: n$ 量词匹配任何结尾为 n 的字符串。
            eg:
                           
        var reg = /\d+$/; //表示结尾必须为数字
        var v1 = "abc123";
        var v2 = "123abc";
        alert(reg.test(v1)); //true
        alert(reg.test(v2)); //false
        */
                           
                           
        /*
            4.综合2,3
                           
        var reg = /^\d+$/; //表示必须都是数字
        var v1 = "abc123";
        var v2 = "123abc";
        var v3 = "123";
        alert(reg.test(v1));    //false
        alert(reg.test(v2));    //false
        alert(reg.test(v3));    //true
                           
        //★综上所述:JS中的正则,一般我们以这种格式:var reg = /^xxxxxx$/;
        //^代表开始,$代表结束
        */
                           
        /*
            5.String对象的match()方法:
            (1)match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
            该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
                               
            (2)语法 :★
            stringObject.match(searchvalue)
            stringObject.match(regexp)
                               
            (3)参数          描述
            searchvalue       必需。规定要检索的字符串值。
                           
            regexp            必需。规定要匹配的模式的 RegExp 对象。
                              如果该参数不是 RegExp 对象,
                              则需要首先把它传递给 RegExp 构造函数,
                              将其转换为 RegExp 对象。
                                             
            (4)返回值
            存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
            (5)说明:
            如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。
            如果没有找到任何匹配的文本, match() 将返回 null
            eg:
                           
                           
        var str = "1 plus 2 equals 3";
        var str1 = "a plus b equals ab";
        var result = str.match(/\d+/g); //使用全局匹配的正则表达式来检索字符串中的所有数字
        var result1 = str.match(/\d+/); //检测到第一个数字就停止检测了,并返回第一个数字
        var result2 = str1.match(/\d+/); // str1中没有数字,将返回null
                       
        alert(result); //1,2,3  数组
        alert(result1); // 1
        alert(result2); // null
                           
                           
        var str3 = "Hello , World, World is not mine";
        var r1 = str3.match("world");   //字符串中没有world返回null
        var r2 = str3.match("World");   //非全局匹配
        var r3 = str3.match(/World/g);  //全局匹配
        var r4 = str3.match(/World/);
        var r5 = str3.match(/world/gi); //全局匹配,并且不区分大小写
        alert(r1); //null
        alert(r2); //World
        alert(r3); //World,World 数组
        alert(r4); //World ,只匹配到第一个
        alert(r5); //World,World 数组 ,忽略大小写
                           
                           
                           
        var str4 = "@Jerry @Tom @Alex Hello" ;
        var re1 = str4.match(/@\w+\s/gim); //匹配以@开头,以空格结尾,中间为字符的
        alert(re1); //@Jerry ,@Tom ,@Alex  数组
        */
                           
                           
        /*
            6.方括号
            (1):[abc]   查找方括号之间的任何字符。
            eg:
                           
        var str = "I love a ,but I like b, c is my wife";
        var r1 = str.match(/[abc]/g); //在字符串中对字符范围 abc 进行全局搜索
        alert(r1); // a,b,b,c 数组
                           
        var r2 = str.match(/[a-h]/g); //在字符串中对字符范围 [a-h] 进行全局搜索
        alert(r2); // e,a,b,e,b,c,f,e
        */
                           
                           
                           
        /*
            (2):[^abc]  查找任何不在方括号之间的字符。
            eg:
                           
        var str = "Is this all there is?";
        var r1 = str.match(/[^a-h]/g); //对不在字符范围 [a-h] 内的字符进行全局搜索
        alert(r1); //I,s, ,t,i,s, ,l,l, ,t,r, ,i,s,?
        */
                           
        /*
            (3):
            [0-9]   查找任何从 0 至 9 的数字。
            [a-z]   查找任何从小写 a 到小写 z 的字符。
            [A-Z]   查找任何从大写 A 到大写 Z 的字符。
            [A-z]   查找任何从大写 A 到小写 z 的字符。
            [adgk]  查找给定集合内的任何字符。
            [^adgk] 查找给定集合外的任何字符。
            (red|blue|green)    查找任何指定的选项。
                           
                           
        var str = "Hello,Tom";
        var str1 = "Hello,Jerry";
        var str2 = "Hello,Jakc";
        var reg = /^Hello,(Tom|Alex|Jerry)$/;   //含有Tom 或者 Alex, 或者 Jerry 结尾
        alert(reg.test(str)); //true
        alert(reg.test(str1)); //true
        alert(reg.test(str2)); //false
        */
                           
        /*
            7.★:元字符
            (1):.   查找单个字符,除了换行和行结束符。
            eg:
                           
        var str = "That's hot!";
        alert(str.match(/h.t/g)); // hat,hot 数组
        */
                           
        /*
            (2):\w 元字符用于查找单词字符。表示必须是字母字符
            单词字符包括:a-z、A-Z、0-9,以及下划线。
            eg:
                           
        var str = "Hello World ,1999 !!";
        alert(str.match(/\w/g)); //H,e,l,l,o,W,o,r,l,d,1,9,9,9 数组
        */
                           
                           
        /*
            (3):\W 元字符用于查找非单词字符。
                单词字符包括:a-z、A-Z、0-9,以及下划线。
                           
        var str = "Hello World ,1999 !!";
        alert(str.match(/\W/g)); // , ,,, ,!,! 数组
        */
                           
        /*
            (4):\d  查找数字。
                           
        var str = "Hello World ,1999 !!";
        alert(str.match(/\d/g)); // 1,9,9,9 数组
        */
                           
        /*
            (5):\D 查找非数字字符。
                           
        var str = "Hello World ,1999 !!";
        alert(str.match(/\D/g)); //H,e,l,l,o, ,W,o,r,l,d, ,,, ,!,! 数组
        */
                           
        /*
            (6):\s  查找空白字符。
                           
        var str = "Hello World ,1999 !!";
        alert(str.match(/\s/g)); // , , 数组
        */
                           
        /*
            (7):\S  查找非空白字符。
                           
        var str = "Hello World ,1999 !!";
        alert(str.match(/\S/g)); //H,e,l,l,o,W,o,r,l,d,,,1,9,9,9,!,! 数组
        */
                           
        /*
            (8):\b 元字符匹配单词边界。
            在单词边界匹配的位置,单词字符后面或前面不与另一个单词字符直接相邻。
            请注意,匹配的单词边界并不包含在匹配中。
            换句话说,匹配的单词边界的长度为零。(不要与 [\b] 混淆。)
                               
            如果未找到匹配,则返回 null。
            提示:\b 元字符通常用于查找位于单词的开头或结尾的匹配。
            例子:
            /\bm/ 匹配 "moon" 中的 'm';
            /oo\b/ 不匹配 "moon" 中的 'oo',因为 'oo' 后面的 'n' 是一个单词字符;
            /oon\b/ 匹配 "moon" 中的 'oon',因为 'oon' 位于字符串的末端,后面没有单词字符;
            /\w\b\w/ 不匹配任何字符,因为单词字符之后绝不会同时紧跟着非单词字符和单词字符。
                           
                               
            var str = "Hello World ,1999 !!";
            var str1 = "HelloWorld ,1999 !!";
            alert(str.match(/\bWo/g)); //Wo
            alert(str1.match(/\bWo/g)); //null
        */
                           
        /*
            8.★ 量词
                               
            n+  匹配任何包含至少一个 n 的字符串。
            n*  匹配任何包含零个或多个 n 的字符串。
            n?  匹配任何包含零个或一个 n 的字符串。
            n{X}    匹配包含 X 个 n 的序列的字符串。
            n{X,Y}  匹配包含 X 或 Y 个 n 的序列的字符串。
            n{X,}   匹配包含至少 X 个 n 的序列的字符串。
            n$  匹配任何结尾为 n 的字符串。
            ^n  匹配任何开头为 n 的字符串。
            ?=n 匹配任何其后紧接指定字符串 n 的字符串。
            ?!n 匹配任何其后没有紧接指定字符串 n 的字符串。
        */
                           
        /*
            (1):n+  匹配任何包含至少一个 n 的字符串。
                n*  匹配任何包含零个或多个 n 的字符串。
                n?  匹配任何包含零个或一个 n 的字符串。
                           
        var str = "Hello Weiyuan2013! I love you ";
        var reg = /\d+/g; //至少包含一个数字
        var reg1 = /l+/g; //结尾至少包含字母l
        var reg2 = /lo?/g; //表示l含有0个或1个o
        alert(reg.test(str)); //true
        alert(reg1.test(str)); //true
        alert(reg2.test(str)); //true
                           
        */
                           
        /*
            (4):
            ①n{X}   匹配包含 X 个 n 的序列的字符串。
            用法:n{X,} 量词匹配包含 X 个 n 的序列的字符串。
                               
            ②n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。
            用法:
            n{X,Y} 量词匹配包含 X 或 Y 个 n 的序列的字符串。
            X 和 Y 必须是数字。并且X < Y
                               
            ③n{X,}  匹配包含至少 X 个 n 的序列的字符串。
            n{X,} 量词匹配包含至少 X 个 n 的序列的字符串。
            X 必须是数字。
                               
                           
        var str = "13523877794";
        var reg = /7{3}/g; //匹配含有3个7
        var reg1 = /7{4}/g; //匹配含有4个7
        var reg2 = /7{3,4}/g; // 匹配含有3个7 或者4 个7
        var reg3 = /7{2,}/g; //至少含有2个7 ,可以含有3个7或者4个。。。。。
        alert(reg.test(str)); //true
        alert(reg1.test(str)); //false
        alert(reg2.test(str)); // true
        alert(reg3.test(str)); //true
        */
                           
        /*
            (5)
            ①?=n    匹配任何其后紧接指定字符串 n 的字符串。
            说明:?=n 量词匹配任何其后紧接指定字符串 n 的字符串
                               
                               
            ②?!n    匹配任何其后没有紧接指定字符串 n 的字符串。
                           
        var str="Is this all there is";
        alert(str.match(/is(?= all)/g)); //对其后紧跟 "all" 的 "is" 进行全局搜索:
                           
        alert(str.match(/is(?! all)/gi)); //对其后没有紧跟 "all" 的 "is" 进行全局搜索:
        */
                           
                           
        //先这样多吧 ---下面看些具体的例子
        /*
            1.注册用户名验证:要求:字母数字的组合
                           
        var paramReg = /^[0-9a-zA-Z]*([a-zA-Z]+[0-9]+|[0-9]+[a-zA-Z]+)[0-9a-zA-Z]*$/;
        var username = "12hanchao2013";
        alert(paramReg.test(username));
        */
                           
                           
        /*
            2.对Email的验证:
                           
        var emailReg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
        var email = "windhan_20_06@163.com";
        alert(emailReg.test(email));
        */
                           
        /*
            3.对电话号码的验证
                               
                           
        //var regPhone = /^(([0\+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;
        var regPhone = /^(([0+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;
        var phone = "4008-007-007";//"0427-7531992"; //"021-60825088";//"76423865";
        var result = regPhone.test(phone);
        alert(result);
        */
                           
        /*
            4.验证手机号码:
                           
        var regMobile = /^1[3|4|5|6|7|8|9][0-9]{1}[0-9]{8}$/;
        var mobile = "13877794164";
        var result = regMobile.test(mobile);
        alert(result);
        */
                           
        /*
            5.验证扣扣号:
                           
        var regQQ =/^[1-9]\d{4,8}$/;
        var qq = "294851313";
        var result = regQQ.test(qq);
        alert(result);
                           
        */
                           
        /*
            6.验证MSN:
                           
        var regMsn =  /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
        var msn = "12345@liehuo.net";
        var result = regMsn.test(msn);
        alert(result);
        */
                           
        /*
            7.验证网址:
                           
        //var regNet = /^http:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?$/;
        var regNet = /^http:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?$/;
        var url = "http://game.baidu.com";
        var result = regNet.test(url);
        alert(result);
        */
                           
                           
        /*
            8.验证IP:
                           
        var checkIp = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
        var ip = "192.168.25.103";
        var result = checkIp.test(ip);
        alert(result);
        */
                           
                          
        })();
    </script>
</head>
<body>
                       
</body>
</html>





//replace方法的使用

// var reg = /\s\*/g;

// var str = "This *is *a *test *string";

// var resultString = str.replace(reg,"--");//用‘--’ 代替str字符串中的‘ *’

// document.writeln(resultString); //This--is--a--test--string


学习参考博客:http://blog.jobbole.com/63398/