<!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