天天看點

JavaScript正規表達式簡單學習

<code>&lt;!DOCTYPE HTML&gt;</code>

<code>&lt;</code><code>html</code><code>&gt;</code>

<code>&lt;</code><code>head</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>meta</code> <code>charset</code><code>=</code><code>"UTF-8"</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>title</code><code>&gt;JS正規表達式學習&lt;/</code><code>title</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>script</code> <code>type</code><code>=</code><code>"text/javascript"</code><code>&gt;</code>

<code>                           </code> 

<code>        </code><code>(function(){</code>

<code>            </code><code>/*</code>

<code>                </code><code>RegExp 對象表示正規表達式,它是對字元串執行模式比對的強大工具。</code>

<code>                                   </code> 

<code>                </code><code>1:直接量文法 /pattern/attributes</code>

<code>                </code><code>2:建立 RegExp 對象的文法:new RegExp(pattern, attributes);</code>

<code>                </code><code>3:參數</code>

<code>                </code><code>(1)參數 pattern 是一個字元串,指定了正規表達式的模式或其他正規表達式。</code>

<code>                </code><code>(2)參數 attributes 是一個可選的字元串,包含屬性 "g"、"i" 和 "m",</code>

<code>                </code><code>分别用于指定全局比對、區分大小寫的比對和多行比對。</code>

<code>                </code><code>ECMAScript 标準化之前,不支援 m 屬性。</code>

<code>                </code><code>如果 pattern 是正規表達式,而不是字元串,則必須省略該參數。</code>

<code>                </code><code>4:傳回值</code>

<code>                </code><code>一個新的 RegExp 對象,具有指定的模式和标志。</code>

<code>                </code><code>如果參數 pattern 是正規表達式而不是字元串,</code>

<code>                </code><code>那麼 RegExp() 構造函數将用與指定的 RegExp 相同的模式和标志建立一個新的 RegExp 對象。</code>

<code>                </code><code>如果不用 new 運算符,而将 RegExp() 作為函數調用,</code>

<code>                </code><code>那麼它的行為與用 new 運算符調用時一樣,</code>

<code>                </code><code>隻是當 pattern 是正規表達式時,它隻傳回 pattern,而不再建立一個新的 RegExp 對象。</code>

<code>                </code><code>5:抛出</code>

<code>                </code><code>(1)SyntaxError - 如果 pattern 不是合法的正規表達式,</code>

<code>                </code><code>或 attributes 含有 "g"、"i" 和 "m" 之外的字元,抛出該異常。</code>

<code>                </code><code>(2)TypeError - 如果 pattern 是 RegExp 對象,</code>

<code>                </code><code>但沒有省略 attributes 參數,抛出該異常。</code>

<code>                </code><code>6.說明:</code>

<code>                </code><code> 由于我們用new RegExp()對象時,有些字元串需要轉義,是以一般我們用“直接量文法”</code>

<code>                </code><code>eg:</code>

<code>                </code><code>var reg = /\d+/;</code>

<code>                </code><code>var reg = new RegExp("\\d+");  //需要轉義比較麻煩</code>

<code>            </code><code>*/</code>

<code>                               </code> 

<code>        </code><code>/*</code>

<code>            </code><code>1.test()方法:test() 方法用于檢測一個字元串是否比對某個模式.</code>

<code>            </code><code>文法:RegExpObject.test(string)</code>

<code>            </code><code>如果字元串 string 中含有與 RegExpObject 比對的文本,則傳回 true,否則傳回 false。</code>

<code>            </code><code>eg:</code>

<code>        </code><code>var reg = /\d+/; //表示必須含有數字</code>

<code>        </code><code>var value1 = "123";</code>

<code>        </code><code>var value2 = "abc";</code>

<code>        </code><code>var v3 = "a2c";</code>

<code>        </code><code>alert(reg.test(value1)); //true</code>

<code>        </code><code>alert(reg.test(value2)); //false</code>

<code>        </code><code>alert(reg.test(v3)); //true</code>

<code>        </code><code>*/</code>

<code>            </code><code>2.^n : ^n 量詞比對任何開頭為 n 的字元串。</code>

<code>        </code><code>var reg = /^\d+/; //表示任何開頭必須為數字</code>

<code>        </code><code>var v1 = "123abc";</code>

<code>        </code><code>var v2 = "abc123";</code>

<code>        </code><code>alert(reg.test(v1)); //true</code>

<code>        </code><code>alert(reg.test(v2)); //false</code>

<code>            </code><code>3.n$: n$ 量詞比對任何結尾為 n 的字元串。</code>

<code>            </code><code>eg:</code>

<code>        </code><code>var reg = /\d+$/; //表示結尾必須為數字</code>

<code>        </code><code>var v1 = "abc123";</code>

<code>        </code><code>var v2 = "123abc";</code>

<code>            </code><code>4.綜合2,3</code>

<code>        </code><code>var reg = /^\d+$/; //表示必須都是數字</code>

<code>        </code><code>var v3 = "123";</code>

<code>        </code><code>alert(reg.test(v1));    //false</code>

<code>        </code><code>alert(reg.test(v2));    //false</code>

<code>        </code><code>alert(reg.test(v3));    //true</code>

<code>        </code><code>//綜上所述:JS中的正則,一般我們以這種格式:var reg = /^xxxxxx$/;</code>

<code>        </code><code>//^代表開始,$代表結束</code>

<code>            </code><code>5.String對象的match()方法:</code>

<code>            </code><code>(1)match() 方法可在字元串内檢索指定的值,或找到一個或多個正規表達式的比對。</code>

<code>            </code><code>該方法類似 indexOf() 和 lastIndexOf(),但是它傳回指定的值,而不是字元串的位置。</code>

<code>            </code><code>(2)文法 :</code>

<code>            </code><code>stringObject.match(searchvalue)</code>

<code>            </code><code>stringObject.match(regexp)</code>

<code>            </code><code>(3)參數          描述</code>

<code>            </code><code>searchvalue       必需。規定要檢索的字元串值。</code>

<code>            </code><code>regexp            必需。規定要比對的模式的 RegExp 對象。</code>

<code>                              </code><code>如果該參數不是 RegExp 對象,</code>

<code>                              </code><code>則需要首先把它傳遞給 RegExp 構造函數,</code>

<code>                              </code><code>将其轉換為 RegExp 對象。</code>

<code>                                             </code> 

<code>            </code><code>(4)傳回值</code>

<code>            </code><code>存放比對結果的數組。該數組的内容依賴于 regexp 是否具有全局标志 g。</code>

<code>            </code><code>(5)說明:</code>

<code>            </code><code>如果 regexp 沒有标志 g,那麼 match() 方法就隻能在 stringObject 中執行一次比對。</code>

<code>            </code><code>如果沒有找到任何比對的文本, match() 将傳回 null</code>

<code>        </code><code>var str = "1 plus 2 equals 3";</code>

<code>        </code><code>var str1 = "a plus b equals ab";</code>

<code>        </code><code>var result = str.match(/\d+/g); //使用全局比對的正規表達式來檢索字元串中的所有數字</code>

<code>        </code><code>var result1 = str.match(/\d+/); //檢測到第一個數字就停止檢測了,并傳回第一個數字</code>

<code>        </code><code>var result2 = str1.match(/\d+/); // str1中沒有數字,将傳回null</code>

<code>                       </code> 

<code>        </code><code>alert(result); //1,2,3  數組</code>

<code>        </code><code>alert(result1); // 1</code>

<code>        </code><code>alert(result2); // null</code>

<code>        </code><code>var str3 = "Hello , World, World is not mine";</code>

<code>        </code><code>var r1 = str3.match("world");   //字元串中沒有world傳回null</code>

<code>        </code><code>var r2 = str3.match("World");   //非全局比對</code>

<code>        </code><code>var r3 = str3.match(/World/g);  //全局比對</code>

<code>        </code><code>var r4 = str3.match(/World/);</code>

<code>        </code><code>var r5 = str3.match(/world/gi); //全局比對,并且不區分大小寫</code>

<code>        </code><code>alert(r1); //null</code>

<code>        </code><code>alert(r2); //World</code>

<code>        </code><code>alert(r3); //World,World 數組</code>

<code>        </code><code>alert(r4); //World ,隻比對到第一個</code>

<code>        </code><code>alert(r5); //World,World 數組 ,忽略大小寫</code>

<code>        </code><code>var str4 = "@Jerry @Tom @Alex Hello" ;</code>

<code>        </code><code>var re1 = str4.match(/@\w+\s/gim); //比對以@開頭,以空格結尾,中間為字元的</code>

<code>        </code><code>alert(re1); //@Jerry ,@Tom ,@Alex  數組</code>

<code>            </code><code>6.方括号</code>

<code>            </code><code>(1):[abc]   查找方括号之間的任何字元。</code>

<code>        </code><code>var str = "I love a ,but I like b, c is my wife";</code>

<code>        </code><code>var r1 = str.match(/[abc]/g); //在字元串中對字元範圍 abc 進行全局搜尋</code>

<code>        </code><code>alert(r1); // a,b,b,c 數組</code>

<code>        </code><code>var r2 = str.match(/[a-h]/g); //在字元串中對字元範圍 [a-h] 進行全局搜尋</code>

<code>        </code><code>alert(r2); // e,a,b,e,b,c,f,e</code>

<code>            </code><code>(2):[^abc]  查找任何不在方括号之間的字元。</code>

<code>        </code><code>var str = "Is this all there is?";</code>

<code>        </code><code>var r1 = str.match(/[^a-h]/g); //對不在字元範圍 [a-h] 内的字元進行全局搜尋</code>

<code>        </code><code>alert(r1); //I,s, ,t,i,s, ,l,l, ,t,r, ,i,s,?</code>

<code>            </code><code>(3):</code>

<code>            </code><code>[0-9]   查找任何從 0 至 9 的數字。</code>

<code>            </code><code>[a-z]   查找任何從小寫 a 到小寫 z 的字元。</code>

<code>            </code><code>[A-Z]   查找任何從大寫 A 到大寫 Z 的字元。</code>

<code>            </code><code>[A-z]   查找任何從大寫 A 到小寫 z 的字元。</code>

<code>            </code><code>[adgk]  查找給定集合内的任何字元。</code>

<code>            </code><code>[^adgk] 查找給定集合外的任何字元。</code>

<code>            </code><code>(red|blue|green)    查找任何指定的選項。</code>

<code>        </code><code>var str = "Hello,Tom";</code>

<code>        </code><code>var str1 = "Hello,Jerry";</code>

<code>        </code><code>var str2 = "Hello,Jakc";</code>

<code>        </code><code>var reg = /^Hello,(Tom|Alex|Jerry)$/;   //含有Tom 或者 Alex, 或者 Jerry 結尾</code>

<code>        </code><code>alert(reg.test(str)); //true</code>

<code>        </code><code>alert(reg.test(str1)); //true</code>

<code>        </code><code>alert(reg.test(str2)); //false</code>

<code>            </code><code>7.:元字元</code>

<code>            </code><code>(1):.   查找單個字元,除了換行和行結束符。</code>

<code>        </code><code>var str = "That's hot!";</code>

<code>        </code><code>alert(str.match(/h.t/g)); // hat,hot 數組</code>

<code>            </code><code>(2):\w 元字元用于查找單詞字元。表示必須是字母字元</code>

<code>            </code><code>單詞字元包括:a-z、A-Z、0-9,以及下劃線。</code>

<code>        </code><code>var str = "Hello World ,1999 !!";</code>

<code>        </code><code>alert(str.match(/\w/g)); //H,e,l,l,o,W,o,r,l,d,1,9,9,9 數組</code>

<code>            </code><code>(3):\W 元字元用于查找非單詞字元。</code>

<code>                </code><code>單詞字元包括:a-z、A-Z、0-9,以及下劃線。</code>

<code>        </code><code>alert(str.match(/\W/g)); // , ,,, ,!,! 數組</code>

<code>            </code><code>(4):\d  查找數字。</code>

<code>        </code><code>alert(str.match(/\d/g)); // 1,9,9,9 數組</code>

<code>            </code><code>(5):\D 查找非數字字元。</code>

<code>        </code><code>alert(str.match(/\D/g)); //H,e,l,l,o, ,W,o,r,l,d, ,,, ,!,! 數組</code>

<code>            </code><code>(6):\s  查找空白字元。</code>

<code>        </code><code>alert(str.match(/\s/g)); // , , 數組</code>

<code>            </code><code>(7):\S  查找非空白字元。</code>

<code>        </code><code>alert(str.match(/\S/g)); //H,e,l,l,o,W,o,r,l,d,,,1,9,9,9,!,! 數組</code>

<code>            </code><code>(8):\b 元字元比對單詞邊界。</code>

<code>            </code><code>在單詞邊界比對的位置,單詞字元後面或前面不與另一個單詞字元直接相鄰。</code>

<code>            </code><code>請注意,比對的單詞邊界并不包含在比對中。</code>

<code>            </code><code>換句話說,比對的單詞邊界的長度為零。(不要與 [\b] 混淆。)</code>

<code>            </code><code>如果未找到比對,則傳回 null。</code>

<code>            </code><code>提示:\b 元字元通常用于查找位于單詞的開頭或結尾的比對。</code>

<code>            </code><code>例子:</code>

<code>            </code><code>/\bm/ 比對 "moon" 中的 'm';</code>

<code>            </code><code>/oo\b/ 不比對 "moon" 中的 'oo',因為 'oo' 後面的 'n' 是一個單詞字元;</code>

<code>            </code><code>/oon\b/ 比對 "moon" 中的 'oon',因為 'oon' 位于字元串的末端,後面沒有單詞字元;</code>

<code>            </code><code>/\w\b\w/ 不比對任何字元,因為單詞字元之後絕不會同時緊跟着非單詞字元和單詞字元。</code>

<code>            </code><code>var str = "Hello World ,1999 !!";</code>

<code>            </code><code>var str1 = "HelloWorld ,1999 !!";</code>

<code>            </code><code>alert(str.match(/\bWo/g)); //Wo</code>

<code>            </code><code>alert(str1.match(/\bWo/g)); //null</code>

<code>            </code><code>8. 量詞</code>

<code>            </code><code>n+  比對任何包含至少一個 n 的字元串。</code>

<code>            </code><code>n*  比對任何包含零個或多個 n 的字元串。</code>

<code>            </code><code>n?  比對任何包含零個或一個 n 的字元串。</code>

<code>            </code><code>n{X}    比對包含 X 個 n 的序列的字元串。</code>

<code>            </code><code>n{X,Y}  比對包含 X 或 Y 個 n 的序列的字元串。</code>

<code>            </code><code>n{X,}   比對包含至少 X 個 n 的序列的字元串。</code>

<code>            </code><code>n$  比對任何結尾為 n 的字元串。</code>

<code>            </code><code>^n  比對任何開頭為 n 的字元串。</code>

<code>            </code><code>?=n 比對任何其後緊接指定字元串 n 的字元串。</code>

<code>            </code><code>?!n 比對任何其後沒有緊接指定字元串 n 的字元串。</code>

<code>            </code><code>(1):n+  比對任何包含至少一個 n 的字元串。</code>

<code>                </code><code>n*  比對任何包含零個或多個 n 的字元串。</code>

<code>                </code><code>n?  比對任何包含零個或一個 n 的字元串。</code>

<code>        </code><code>var str = "Hello Weiyuan2013! I love you ";</code>

<code>        </code><code>var reg = /\d+/g; //至少包含一個數字</code>

<code>        </code><code>var reg1 = /l+/g; //結尾至少包含字母l</code>

<code>        </code><code>var reg2 = /lo?/g; //表示l含有0個或1個o</code>

<code>        </code><code>alert(reg1.test(str)); //true</code>

<code>        </code><code>alert(reg2.test(str)); //true</code>

<code>            </code><code>(4):</code>

<code>            </code><code>①n{X}   比對包含 X 個 n 的序列的字元串。</code>

<code>            </code><code>用法:n{X,} 量詞比對包含 X 個 n 的序列的字元串。</code>

<code>            </code><code>②n{X,Y} 比對包含 X 或 Y 個 n 的序列的字元串。</code>

<code>            </code><code>用法:</code>

<code>            </code><code>n{X,Y} 量詞比對包含 X 或 Y 個 n 的序列的字元串。</code>

<code>            </code><code>X 和 Y 必須是數字。并且X &lt; Y</code>

<code>            </code><code>③n{X,}  比對包含至少 X 個 n 的序列的字元串。</code>

<code>            </code><code>n{X,} 量詞比對包含至少 X 個 n 的序列的字元串。</code>

<code>            </code><code>X 必須是數字。</code>

<code>        </code><code>var str = "13523877794";</code>

<code>        </code><code>var reg = /7{3}/g; //比對含有3個7</code>

<code>        </code><code>var reg1 = /7{4}/g; //比對含有4個7</code>

<code>        </code><code>var reg2 = /7{3,4}/g; // 比對含有3個7 或者4 個7</code>

<code>        </code><code>var reg3 = /7{2,}/g; //至少含有2個7 ,可以含有3個7或者4個。。。。。</code>

<code>        </code><code>alert(reg1.test(str)); //false</code>

<code>        </code><code>alert(reg2.test(str)); // true</code>

<code>        </code><code>alert(reg3.test(str)); //true</code>

<code>            </code><code>(5)</code>

<code>            </code><code>①?=n    比對任何其後緊接指定字元串 n 的字元串。</code>

<code>            </code><code>說明:?=n 量詞比對任何其後緊接指定字元串 n 的字元串</code>

<code>            </code><code>②?!n    比對任何其後沒有緊接指定字元串 n 的字元串。</code>

<code>        </code><code>var str="Is this all there is";</code>

<code>        </code><code>alert(str.match(/is(?= all)/g)); //對其後緊跟 "all" 的 "is" 進行全局搜尋:</code>

<code>        </code><code>alert(str.match(/is(?! all)/gi)); //對其後沒有緊跟 "all" 的 "is" 進行全局搜尋:</code>

<code>        </code><code>//先這樣多吧 ---下面看些具體的例子</code>

<code>            </code><code>1.注冊使用者名驗證:要求:字母數字的組合</code>

<code>        </code><code>var paramReg = /^[0-9a-zA-Z]*([a-zA-Z]+[0-9]+|[0-9]+[a-zA-Z]+)[0-9a-zA-Z]*$/;</code>

<code>        </code><code>var username = "12hanchao2013";</code>

<code>        </code><code>alert(paramReg.test(username));</code>

<code>            </code><code>2.對Email的驗證:</code>

<code>        </code><code>var emailReg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;</code>

<code>        </code><code>var email = "[email protected]";</code>

<code>        </code><code>alert(emailReg.test(email));</code>

<code>            </code><code>3.對電話号碼的驗證</code>

<code>        </code><code>//var regPhone = /^(([0\+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;</code>

<code>        </code><code>var regPhone = /^(([0+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;</code>

<code>        </code><code>var phone = "4008-007-007";//"0427-7531992"; //"021-60825088";//"76423865";</code>

<code>        </code><code>var result = regPhone.test(phone);</code>

<code>        </code><code>alert(result);</code>

<code>            </code><code>4.驗證手機号碼:</code>

<code>        </code><code>var regMobile = /^1[3|4|5|6|7|8|9][0-9]{1}[0-9]{8}$/;</code>

<code>        </code><code>var mobile = "13877794164";</code>

<code>        </code><code>var result = regMobile.test(mobile);</code>

<code>            </code><code>5.驗證扣扣号:</code>

<code>        </code><code>var regQQ =/^[1-9]\d{4,8}$/;</code>

<code>        </code><code>var qq = "294851313";</code>

<code>        </code><code>var result = regQQ.test(qq);</code>

<code>            </code><code>6.驗證MSN:</code>

<code>        </code><code>var regMsn =  /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;</code>

<code>        </code><code>var msn = "[email protected]";</code>

<code>        </code><code>var result = regMsn.test(msn);</code>

<code>            </code><code>7.驗證網址:</code>

<code>        </code><code>//var regNet = /^http:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&amp;=]*)?$/;</code>

<code>        </code><code>var regNet = /^http:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&amp;=]*)?$/;</code>

<code>        </code><code>var url = "http://game.baidu.com";</code>

<code>        </code><code>var result = regNet.test(url);</code>

<code>            </code><code>8.驗證IP:</code>

<code>        </code><code>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])$/;</code>

<code>        </code><code>var ip = "192.168.25.103";</code>

<code>        </code><code>var result = checkIp.test(ip);</code>

<code>                          </code> 

<code>        </code><code>})();</code>

<code>    </code><code>&lt;/</code><code>script</code><code>&gt;</code>

<code>&lt;/</code><code>head</code><code>&gt;</code>

<code>&lt;</code><code>body</code><code>&gt;</code>

<code>&lt;/</code><code>body</code><code>&gt;</code>

<code>&lt;/</code><code>html</code><code>&gt;</code>

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

     本文轉自韓立偉 51CTO部落格,原文連結:http://blog.51cto.com/hanchaohan/1251007,如需轉載請自行聯系原作者

繼續閱讀