JavaScript正則表達式簡單學習

<!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方法的使用javascript

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

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

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

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


學習參考博客:http://blog.jobbole.com/63398/ide

相關文章
相關標籤/搜索