javascript 正則表達式
ECMAScript基礎: javascript
numberObject.toFixed(2); 填充到兩位小數 var numberObject = new Number(9); numberObject.toFixed(2);// outputs 9.00
stringObject.lastIndexOf(); "akescript.cn".indexOf("c") = 4; "akescript.cn".lastIndexOf("c") = 10;
stringObject.localeCompare(stringObject2); stringObject按字母排序排在參數以前則返回負數(-1); 相同返回0 ;反之返回正數(1) var string1= new String("ake"); string1.localeCompare("ke") //outputs -1 string1.localeCompare("ake") //outputs 0 string1.localeCompare("a") // outputs 1
stringObject.slice(sNum,eNum); 相似於substring()方法,不一樣的是參數爲負有效。 "akescript".substring(3); // outputs "script" "akescript".slice(-6); // outputs "script"
delete object.name 移除已自定義的屬性或方法的引用 var o = new Object; o.name = "ake87"; alert(o.name); // outputs "ake87" delete o.name; alert(o.name); // outputs undefined
void對任何值都返回undefined <a href="javascript:void(window.open('about:blank'));">Open</a>
一元加號"+"將字符串的數字轉變爲數字 var sNum = "44"; var iNum = +sNum; alert(typeof iNum) ; //outputs "number"
undefined類型不能用於邏輯與或非的運算
===、!== 在比較以前不進行類型的轉換
functionObject.length獲得該函數默認的參數個數 於2008-11-25。 之後不知道還會不會這麼認真。。。
對象基礎 html
數組可根據須要增長或減小項。增長只須要把存放值的項放入下一個未使用的位置便可。 var arr=new Array(3); var arr[4]="ake" // arr.length=5 arr[3]=null;
var str="green"; var arr = str.split(""); // arr = ["g","r","e","e","n"];
arr.slice(sNum,eNum); 一樣對數組有效。操做的不是字符而是數組的項。
array.pop(); 刪除數組的最後一項,並返回該項的值。 array.push(); 在數組的最後一個位置以後,添加一個數組項,參數爲添加的項值
array.shift()/ unshift();使用方法同上,不一樣的是操做的不是最後一項,而是第一項。
array.reverse();顛倒數組項的順序。 array.sort(); 將數組想的值轉換爲字符串,比較後按「升序」排列數組。
splice(sNum,dNum,items);數組中插入項。sNum:插入的位置,dNum:刪除的項的個數,items:插入的項值。 array.splice(0,2);刪除數組的前兩項。 array.splice(2,0,"ake","script"); 在數組第二項位置插入「ake」和「script」值。 array.splice(2,1,"ake","script"); 刪除數組的第二項,並插入項「ake」和「script」。
應該儘可能避免使用escape(); 如有須要但是使用encodeURI();
獲得一個在2-9之間的隨機數。 Math.floor(Math.random()*8 + 2); ==> Math.floor(Math.random()*total_Numbers + first_item_value);
字符串了鏈接:建議使用join()方法,該方法比使用「+」鏈接字串更節約時間。
StringBuffer類: function StringBuffer(){this._strings = new Array;}StringBuffer.prototype.append = function(str){this._strings.push(str);};StringBuffer.prototype.toString = function(){return this._strings.join("");};
類的建立:使用構造函數和原型的方法。this+prototype。 類的繼承:使用構造函數和原型鏈的方法。call()/append() + prototype 構造函數——> 屬性; 原型——> 方法。
瀏覽器中的JavaScript java
moveBy(dx,dy);resizeBy(dw,dh);窗口相對移動或相對改變,參數爲改變的值。 moveTo(dx,dy);resizeTo(dw,dh);窗口移動到dx,dy;窗口大小變爲寬dw高dh。
IE:window.screenLeft,window.screenTop——判斷窗口的位置 document.body.offsetWidth(offsetHeight)獲取視窗口的大小(HTML頁面的區域) Mozilla,Opera,safari:window.screenX(screenY) 判斷窗口位置。 innerWidth(Height) 判斷視窗口的大小。 window.outerWidth(outerHeight) 判斷瀏覽器窗口的大小。
alert(只有OK按鈕)——confirm(OK和Cancel按鈕)——prompt(OK、Cancel按鈕和一個text文本框)
在執行一組指定的代碼前等待一段時間,使用暫停(setTimeout);若要反覆執行某些代碼,則使用間隔(setInterval) js暫停方法:var TimeoutId = setTimeout(someFunction,1000);clearTimeout(TimeoutId);
每當瀏覽器遇到</script>時,它都假定代碼塊是完整的。(即便它出如今JavaScript字符串中),這時應該截斷它:"</scr" + "ipt>"。
當頁面徹底載入後使用write()會抹去當前頁面的全部內容。
對window.open打開的窗體寫入代碼使用命令:document.open();document.write();docuemnt.close();
location.href方法導航頁面會將新的URL地址記入「歷史」中。location.replace不會(about document.URL??)
location.reload();參數爲true時,頁面將從服務器從新載入;false時,從緩存中從新載入。 若須要使用,最好把reload()放在最後一行。
cookieEnabled:說明是否啓用了cookie的boolean值。javaEnabled(),是否啓用了java 注意不一樣瀏覽器的可用性
screen.availWidth/availHeight:窗口可以使用的屏幕寬/高度,其中包括操做系統元素(如windows的工具欄) screen.width/height :屏幕的寬/高度,以像素計
screen.colorDepth:用戶表示顏色的位數 2008-11-26
DOM基礎 node
特性/方法 類型/返回類型 nodeName String nodeValue String nodeType Number ownerDocument Document firstChild Node lastChild Node childNodes NodeList previousSibling Node nextSibling Node hasChildNodes() Boolean attributes NamedNodeMap* 包含了表明一個元素的特性的Attr對象;僅用於Element節點 appendChild(node) Node removeChild(node) Node replaceChild(newnode,oldnode) Node 在childNodes中的oldnode替換成newnode insertBefore(newnode,refnode) Node 在childNodes中的refnode以前插入newnode *NamedNodeMap——同時用數值和名字進行索引的節點表;用於表示元素特性。
<html/>元素:var oHtml = document.documentElement; <head/>元素:var oHead = oHtml.firstChild || oHtml.childNodes[0] || oHtml.childNodes.item(0); <body/>元素:var oBody = oHtml.lastChild || oHtml.childNodes[1] || oHtml.childNodes.item(1);
Mozilla認爲元素之間的空白都是Text節點,而IE則會忽略這些空白。
使用nodeType特性檢驗節點類型。
getNamedItem(name)——返回nodeName屬性值等於name的節點; removeNamedItem(name)——刪除nodeName屬性值等於name的節點; setNamedItem(node)——將node添加到列表中,按其nodeName屬性進行索引; item(pos)——像NodeList同樣,返回在位置pos的節點; 這些方法都是返回一個Attr節點,而非特性值。——貌似比較複雜的方法。。。
getAttribute(name)——等於attributes.getNamedItem(name).value; setAttribute(name,newvalue)——等於attributes.getNamedItem(name).value=newvalue; removeAttribute(name)——等於attributes.removeNamedItem(name)。 相對上一種方法好直觀的多,也簡潔的多。
document.getElementsByTagName("*")返回document中包含的全部元素。 當參數是一個星號的時候,IE6.0並不返回全部的元素,必須使用document.all來替代它
document.getElementsByName();返回name值等於指定值的全部元素。 但在IE6.0和Opera7.5在這個方法使用上還存在一些錯誤。它們還會返回id等於指定名稱的元素。它們還僅僅檢查<input/>和<img/>元素。
對於document.getElementById()方法在IE6.0中會返回與給定的ID匹配的name特性的元素。
方法 描述 createAttribute(name) 用給定名稱name建立特性節點 *createCDASection(text) 用包含文本text的文本子節點建立一個CDATASection createComment(text) 建立包含文本text的註釋節點 createDocumentFragment() 建立文檔碎片節點(什麼東西??) createElement(tagname) 建立標籤名爲tagname的元素 *createEntityReference(name) 建立給定名稱的實體引用節點 *createProcessingInstruction(target,data) 建立包含給定target和data的PI節點 createTextNode(text) 建立包含文本text的文本節點 *只有Mozilla瀏覽器支持此方法。
全部的的DOM操做必須在頁面徹底載入以後才能進行。當頁面正在載入時,要向DOM插入相關代碼是不可能的,由於在頁面徹底下載到客戶端機器以前,是沒法徹底構建DOM樹的。
一旦把節點添加到document.body(或者它的後代節點)中,頁面就會刷新並反映出這個變化。因此,若要向document添加大量數據時會是頁面不斷的刷新變化。想要避免這種狀況,可使用建立文檔碎片的方法:createDocumentFagment();將要添加的節點先appendChild()添加到這個建立的文檔碎片對象上,而後一次性將文檔碎片以appendChild方法添加到document.body中。前一個appendChild()的調用實際上並非把文檔碎片節點自己追加到<body/>元素中,而是僅僅追加碎片中的子節點。(?)
Attribute的方法屬於核心的DOM方法;而如oA.href的直接引用屬性的方法屬於HTML DOM的方法。
setAttribute()在IE上有些許問題,所以最好使用HTML DOM的方法,且我的以爲此種方法更直觀和簡潔。
<table/>元素的方法: caption——指向<caption/>元素(若是存在) tBodies——<tbody/>元素的集合 tFoot——指向<tfoot/>元素(若是存在) tHead——指向<thead/>元素(若是存在) rows——表格中全部行的集合 createTHead()——建立<thead/>元素並將其放入表格 createTFoot()——建立<tfoot/>元素並將其放入表格 createCaption()——建立<caption/>元素並將其放入表格 deleteTHead()——刪除<thead/>元素 deleteTFoot()——刪除<tfoot/>元素 deleteCaption()——刪除<caption/>元素 deleteRow(position)——刪除指定位置上的行 insertRow(position)——在rows集合中的指定位置插入一個新行
<tbody/>元素添加如下內容: rows——<tbody/>中全部行的集合 deleteRow(position)——刪除指定位置上的行 insertRow(position)——在rows集合中的指定位置插入一個新行 <tr/>元素添加如下內容: cells——<tr/>元素中全部的單元格 deleteCell(position)——刪除給定位置上的單元格 insertCell(position)——在cells集合的給定位置插入一個新的單元格
以上方法僅僅屬於DOM level1的部分。DOM level2中的功能:DOM遍歷(NodeIterator)和TreeWalker方法。 目前只有Mozilla和其餘少數瀏覽器支持DOM level2以上的功能,因此這些方法能夠暫時不予以考慮。
implementation對象用來肯定給定的DOM實現到底支持DOM的哪些部分。用document.implementation.hasFeature("要檢查的特徵","特徵的版本")方法來檢驗。 但這個方法有其明顯的缺陷——DOM實現是否與DOM標準一致是由去進行實現的人(或公司)決定的。故該方法的結果其實並不必定是徹底真實的,包括Mozilla。
sString:被指定的要匹配的字符串。 var reg=/regstr/gi;建立個RegExp對象。regstr:正則表達式;g:全局匹配;i:不區分大小寫。 reg.test(sString);若是給定字串(只有一個參數)匹配該模式,則返回true,不然返回false reg.exec(sString);返回一個數組。數組中的第一個條目是第一個匹配;其餘的反向引用。(?) sString.match(reg);該方法返回一個包含在字符串中的全部匹配的數組。 sString.search(reg);返回在字符串中出現的一個匹配的位置(int)。
sString.replace(reg,reStrOrFunc);第二個參數能夠是字符串或者函數(應該要有返回值吧?) sString.split(reg);參數能夠是正則表達式,如/\,/:「,」
元字符 :( [ { \ ^ $ | ) ? * + .
特殊字符: \t 製表符 \n 換行符 \r 回車符 \f 換頁符 \a alert字符 \e escape字符 \cx 與X相對應的控制字符 \b 回退字符 \v 垂直製表符 \0 空字符
字符類: 如下內容是我的的理解,若是您以爲其內容有誤導他人的嫌疑,請留言相告,我會修改的。 [abc],簡單類:匹配方括號中任一字符,a或b或c; ^,負向類:是非的意思,如[^ab]表示匹配不包含a或b的狀況; [a-z],範圍類:匹配從a到z的字符。注意該例子不包含A-Z之間的字符,或者你可使用i選項; 組合類:是由多種類組合而成的字符類。如:[a-k7-8\n],匹配全部a-k以及7-8的字符,以及一個換行符;
預約義類: 等同於: 匹配 . [^\n\r] 除了換行和回車以外的任意字符 \d [0-9] 數字 \D [^0-9] 非數字字符 \s [ \t\n\x0B\f\r] 空白字符 \S [^ \t\n\x0B\f\r] 非空白字符 \w [a-zA-Z_0-9] 單詞字符(英文字符、數字和下劃線) \W [^a-zA-Z_0-9] 非單詞字符
量詞: 簡單量詞: ? 出現零次或一次 * 出現零次或屢次(任意次數) + 出現一次或屢次(至少出現一次) {n} 出現n次(固定次數) {n,m} 至少出現n次,但不超過m次 {n,} 至少出現n次 2008.12.1
貪婪的、惰性的和支配性的量詞 貪婪量詞:先看整個字符串是否匹配。若沒有發現匹配,則去掉最後字符串的最後一個字符再嘗試匹配,如此循環,直到發現一個匹配或者字符串不剩一個字符。目前爲止討論的都是貪婪的量詞。 惰性量詞:先看字符串中的第一個字母是否匹配。若沒有發現匹配,則讀入下一個字符進行匹配嘗試,如此循環,直到發下一個匹配或者整個字符串都檢查過也沒有匹配。它與貪婪量詞的工做方式剛好相反。 支配量詞:只嘗試匹配整個字符串,若沒有發現匹配,中止嘗試。(返回false) 貪婪 惰性 支配 描述 ? ?? ?+ 零次或一次出現 * *? *+ 零次或屢次出現 + ++ ++ 一次或屢次出現 {n} {n}? {n}+ 剛好n次出現 {n,m} {n,m}? {n,m}+ 至少n次至多m次出現 {n,} {n,}? {n,}+ 至少n次出現 PS:瀏覽器對支配量詞的支持還很不完善。IE和Opera不支持支配量詞,使用會拋出一個錯誤。Mozilla不會產生錯誤,但它會將支配量詞看做是貪婪的。
分組:經過使用一系列小括號()包圍一系列字符、字符類以及量詞來使用。 String.prototype.trim = function(){var reg = /^\s+(.*?)\s+$/;return this.replace(reg,$1);}//該方法與其餘語言中的trim()方法同樣,用以除去字符串頭尾的空格。
.1:在完成表達式計算後,每一個分組都被存放在一個特殊的地方以備未來使用。這些存儲在分組中的特殊值,稱之爲反向引用。如:(a?(b?(c?))),第一個反向引用爲(a?(b?(c?))),第二個爲(b?(c?)),第三個爲(c?)。
.2:在使用正則表達式對象的test()、match()或search()方法後,反向引用的值能夠從RegExp構造函數中得到。如: var sString = "#123456789"; var reg = /#(\d+)/; reg.test(sString); alert(RegExp.$1);//outputs "123456789" 還能夠直接在定義分組的表達式中包含反向引用。如 /dogdog/ === /(dog)\1/ .3:反向引用能夠用在String對象的replace()方法中: var sString = "1234 56789"; var reg = /(\d{4}) (\d{4})/; var sNew = sString.replace(reg,"$2 $1"); alert(sNew);//outputs "5678 1234";
候選操做符,「|」:相似於或操做。 var reg = /badword|otherbadword/gi; var sString = "this is a string using badword1 and badword2"; var sNew = sString.replace(reg,"****"); alert(sNew);//outputs "this is a string using ****1 and ****2";//屏蔽敏感字詞
建立反向引用的分組稱之爲捕獲性分組,而非捕獲性分組則無需存儲結果;非捕獲性分組建立方法:(?: /*..*/ ) String.prototype.stripHTML = function(){var reg=/<(?:.|\s)*?>/g;return this.replace(reg,"");}//剔除字串中的HTML標籤 var sTest = "<b>this is a test string</br>"; alert(sTest.stripHTML());//outputs "this is a test string"
前瞻:告訴正則表達式運算器向前看一些字符而不移動其位置,簡單講:當某個特定的字符分組出如今另外一個字符串以前時,纔去捕獲它(或匹配它)。 前瞻存在正向前瞻和負向前瞻。 正向前瞻檢查的是接下來出現的是否是某個特定字符集。而負向前瞻則檢查接下來的不該該出現的特定字符集。(兩則相對是非的關係,相關字符是否相連)
建立正向前瞻要將模式放在(?=和)之間。注意這不是分組,分組不會考慮前瞻的存在。 var sString1 = "bedroom"; var sString2 = "bedding"; var reg = /(bed(?=room))/; alert(reg.test(sString1));//outputs "true" alert(RegExp.$1); //outputs "bed"//引用不包含"room" alert(reg.test(sString2));//outputs "false" 以上爲正向前瞻,建立負向前瞻要將模式放在(?!和)之間。上個例子用負向前瞻將匹配bedding。 儘管JavaScript支持正則表達式前瞻,但它不支持後瞻。後瞻能夠匹配這種模式:「匹配b當且僅當它前面沒有a」。
邊界 描述 ^ 行開頭 $ 行結尾 \b 單詞的邊界 \B 非單詞的邊界
多行模式 在正則表達式後面添加m選項:/(\d)/gm。將對每行進行匹配而不是隻對全局。多行模式會改變^和&的邊界行爲。
RegExp對象的實例屬性: global——Boolean值,表示g(全局選項)是否已設置。 ignoreCase——Boolean值,表示i(忽略大小寫選項)是否已設置。 lastIndex——整數,表明下次匹配將會從哪一個字符位置開始(只有當使用exec()或test()函數纔會填入,不然爲0)。 multiline——Boolean值,表示m(多行模式選項)是否已設置。 source——正則表達式的源字符串形式。例如,表達式/[ba]*/的source將返回「[ba]*」。
屬性lastIndex表示正則表達式在某個字符串中中止以前,查找了多遠: var sString="bbq is short for barbecue"; var reg=/b/g; reg.exec(sString); alert(reg.lastIndex);//outputs "1" reg.exec(sString); alert(reg.lastIndex);//outputs "2" reg.exec(sString); alert(reg.lastIndex);//outputs "18" reg.exec(sString); alert(reg.lastIndex);//outputs "21" 能夠自行設定lastIndex;
靜態的RegExp屬性: 長名 短名 描述 input $_ 最後用於匹配的字符串(傳遞給exec()或test()的字符串) lastMatch $& 最後匹配的字符 lastParen $+ 最後匹配的分組 leftContext $` 在上次匹配的前面的字串 multiline $* 用於指定是否全部的表達式都使用多行模式的布爾值 rightContext $' 在上次匹配以後的字串 這些屬性能夠告訴你,關於剛使用exec()或test()完成的匹配的一些特定信息 var sString = "this has been a short,short summer"; var reg = /(s)hort/g; reg.test(sString); alert(RegExp.input); //outputs "this has been a short,short summer" alert(RegExp.leftContext); //outputs "this has been a" alert( RegExp.rightContext); //outputs ", short summer" alert( RegExp.lastMatch); //outputs "short" alert( RegExp.lastParen); //outpus "s"
IE和Opera並不支持RegExp.multiline,因此最好單獨的對每一個表達式設置m選項而不要直接設置這個標記。
日期驗證函數: function isValidDate(str){ var reg=/(?:0[1-9]|[12][0-9]|3[01])\/(?:0[1-9]|1[0-2])\/(?:19|20\d{2})/; return reg.test(str);} alert(isValidDate("5/5/2004")); //outputs "true" alert(isValidDate("5/13/2004")); //outputs "false"
電子郵件地址驗證函數: function isValidEmail(str){ var reg=/^(?:\w+\.?)*\w+@(?:\w+\.?)*\w+$/; return reg.test(str);} alert(isValidEmail("ake87#126.com")); //outputs false
歡迎關注本站公眾號,獲取更多信息