javascript 正則表達式

 

ECMAScript基礎:javascript

  1. numberObject.toFixed(2); 填充到兩位小數
     var numberObject = new Number(9);
    numberObject.toFixed(2);// outputs 9.00
  2. stringObject.lastIndexOf();
     "akescript.cn".indexOf("c") = 4;
    "akescript.cn".lastIndexOf("c") = 10; 
  3. 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
  4. stringObject.slice(sNum,eNum);  相似於substring()方法,不一樣的是參數爲負有效。
    "akescript".substring(3); // outputs "script"
    "akescript".slice(-6); // outputs "script"
  5. delete object.name 移除已自定義的屬性或方法的引用
     var o = new Object;
    o.name = "ake87";
    alert(o.name); // outputs "ake87"
    delete o.name;
    alert(o.name); // outputs undefined
  6. void對任何值都返回undefined
    <a href="javascript:void(window.open('about:blank'));">Open</a> 
  7. 一元加號"+"將字符串的數字轉變爲數字
    var sNum = "44"; var iNum = +sNum;
     alert(typeof iNum) ; //outputs "number"
  8. undefined類型不能用於邏輯與或非的運算
  9.  ===、!== 在比較以前不進行類型的轉換
  10.  functionObject.length獲得該函數默認的參數個數
    於2008-11-25。之後不知道還會不會這麼認真。。。

對象基礎html

  1. 數組可根據須要增長或減小項。增長只須要把存放值的項放入下一個未使用的位置便可。
    var arr=new Array(3); var arr[4]="ake" // arr.length=5   arr[3]=null;
  2. var str="green";    var arr = str.split(""); // arr = ["g","r","e","e","n"];
  3. arr.slice(sNum,eNum); 一樣對數組有效。操做的不是字符而是數組的項。
  4. array.pop();   刪除數組的最後一項,並返回該項的值。
    array.push(); 在數組的最後一個位置以後,添加一個數組項,參數爲添加的項值
  5. array.shift()/ unshift();使用方法同上,不一樣的是操做的不是最後一項,而是第一項。
  6. array.reverse();顛倒數組項的順序。
    array.sort(); 將數組想的值轉換爲字符串,比較後按「升序」排列數組。
  7. 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」。
  8. 應該儘可能避免使用escape(); 如有須要但是使用encodeURI();
  9. 獲得一個在2-9之間的隨機數。
    Math.floor(Math.random()*8 + 2); ==> Math.floor(Math.random()*total_Numbers + first_item_value);
  10. 字符串了鏈接:建議使用join()方法,該方法比使用「+」鏈接字串更節約時間。
  11. StringBuffer類:
    function StringBuffer(){this._strings  = new Array;}StringBuffer.prototype.append = function(str){this._strings.push(str);};StringBuffer.prototype.toString = function(){return this._strings.join("");};
  12. 類的建立:使用構造函數和原型的方法。this+prototype。
    類的繼承:使用構造函數和原型鏈的方法。call()/append() + prototype
    構造函數——> 屬性; 原型——> 方法。

瀏覽器中的JavaScriptjava

  1. moveBy(dx,dy);resizeBy(dw,dh);窗口相對移動或相對改變,參數爲改變的值。
    moveTo(dx,dy);resizeTo(dw,dh);窗口移動到dx,dy;窗口大小變爲寬dw高dh。
  2. IE:window.screenLeft,window.screenTop——判斷窗口的位置
    document.body.offsetWidth(offsetHeight)獲取視窗口的大小(HTML頁面的區域)
    Mozilla,Opera,safari:window.screenX(screenY) 判斷窗口位置。
    innerWidth(Height) 判斷視窗口的大小。
    window.outerWidth(outerHeight) 判斷瀏覽器窗口的大小。
  3. alert(只有OK按鈕)——confirm(OK和Cancel按鈕)——prompt(OK、Cancel按鈕和一個text文本框)
  4. 在執行一組指定的代碼前等待一段時間,使用暫停(setTimeout);若要反覆執行某些代碼,則使用間隔(setInterval)
    js暫停方法:var TimeoutId = setTimeout(someFunction,1000);clearTimeout(TimeoutId);
  5. 每當瀏覽器遇到</script>時,它都假定代碼塊是完整的。(即便它出如今JavaScript字符串中),這時應該截斷它:"</scr" + "ipt>"。
  6. 當頁面徹底載入後使用write()會抹去當前頁面的全部內容。
  7. 對window.open打開的窗體寫入代碼使用命令:document.open();document.write();docuemnt.close();
  8. location.href方法導航頁面會將新的URL地址記入「歷史」中。location.replace不會(about document.URL??)
  9. location.reload();參數爲true時,頁面將從服務器從新載入;false時,從緩存中從新載入。
    若須要使用,最好把reload()放在最後一行。
  10. cookieEnabled:說明是否啓用了cookie的boolean值。javaEnabled(),是否啓用了java
    注意不一樣瀏覽器的可用性
  11. screen.availWidth/availHeight:窗口可以使用的屏幕寬/高度,其中包括操做系統元素(如windows的工具欄)
    screen.width/height :屏幕的寬/高度,以像素計
  12. screen.colorDepth:用戶表示顏色的位數
    2008-11-26

DOM基礎node

  1. 特性/方法        類型/返回類型
    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——同時用數值和名字進行索引的節點表;用於表示元素特性。
  2. <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);
  3. Mozilla認爲元素之間的空白都是Text節點,而IE則會忽略這些空白。
  4. 使用nodeType特性檢驗節點類型。
  5. getNamedItem(name)——返回nodeName屬性值等於name的節點;
    removeNamedItem(name)——刪除nodeName屬性值等於name的節點;
    setNamedItem(node)——將node添加到列表中,按其nodeName屬性進行索引;
    item(pos)——像NodeList同樣,返回在位置pos的節點;
    這些方法都是返回一個Attr節點,而非特性值。——貌似比較複雜的方法。。。
  6. getAttribute(name)——等於attributes.getNamedItem(name).value;
    setAttribute(name,newvalue)——等於attributes.getNamedItem(name).value=newvalue;
    removeAttribute(name)——等於attributes.removeNamedItem(name)。
    相對上一種方法好直觀的多,也簡潔的多。
  7. document.getElementsByTagName("*")返回document中包含的全部元素。
    當參數是一個星號的時候,IE6.0並不返回全部的元素,必須使用document.all來替代它
  8. document.getElementsByName();返回name值等於指定值的全部元素。
    但在IE6.0和Opera7.5在這個方法使用上還存在一些錯誤。它們還會返回id等於指定名稱的元素。它們還僅僅檢查<input/>和<img/>元素。
  9. 對於document.getElementById()方法在IE6.0中會返回與給定的ID匹配的name特性的元素。
  10. 方法        描述
    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瀏覽器支持此方法。
  11. 全部的的DOM操做必須在頁面徹底載入以後才能進行。當頁面正在載入時,要向DOM插入相關代碼是不可能的,由於在頁面徹底下載到客戶端機器以前,是沒法徹底構建DOM樹的。
  12. 一旦把節點添加到document.body(或者它的後代節點)中,頁面就會刷新並反映出這個變化。因此,若要向document添加大量數據時會是頁面不斷的刷新變化。想要避免這種狀況,可使用建立文檔碎片的方法:createDocumentFagment();將要添加的節點先appendChild()添加到這個建立的文檔碎片對象上,而後一次性將文檔碎片以appendChild方法添加到document.body中。前一個appendChild()的調用實際上並非把文檔碎片節點自己追加到<body/>元素中,而是僅僅追加碎片中的子節點。(?)
  13. Attribute的方法屬於核心的DOM方法;而如oA.href的直接引用屬性的方法屬於HTML DOM的方法。
  14. setAttribute()在IE上有些許問題,所以最好使用HTML DOM的方法,且我的以爲此種方法更直觀和簡潔。
  15. <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集合中的指定位置插入一個新行
  16. <tbody/>元素添加如下內容:
    rows——<tbody/>中全部行的集合
    deleteRow(position)——刪除指定位置上的行
    insertRow(position)——在rows集合中的指定位置插入一個新行
    <tr/>元素添加如下內容:
    cells——<tr/>元素中全部的單元格
    deleteCell(position)——刪除給定位置上的單元格
    insertCell(position)——在cells集合的給定位置插入一個新的單元格
  17. 以上方法僅僅屬於DOM level1的部分。DOM level2中的功能:DOM遍歷(NodeIterator)和TreeWalker方法。
    目前只有Mozilla和其餘少數瀏覽器支持DOM level2以上的功能,因此這些方法能夠暫時不予以考慮。
  18. implementation對象用來肯定給定的DOM實現到底支持DOM的哪些部分。用document.implementation.hasFeature("要檢查的特徵","特徵的版本")方法來檢驗。
    但這個方法有其明顯的缺陷——DOM實現是否與DOM標準一致是由去進行實現的人(或公司)決定的。故該方法的結果其實並不必定是徹底真實的,包括Mozilla。
  1. sString:被指定的要匹配的字符串。
    var reg=/regstr/gi;建立個RegExp對象。regstr:正則表達式;g:全局匹配;i:不區分大小寫。
    reg.test(sString);若是給定字串(只有一個參數)匹配該模式,則返回true,不然返回false
    reg.exec(sString);返回一個數組。數組中的第一個條目是第一個匹配;其餘的反向引用。(?)
    sString.match(reg);該方法返回一個包含在字符串中的全部匹配的數組。
    sString.search(reg);返回在字符串中出現的一個匹配的位置(int)。
  2. sString.replace(reg,reStrOrFunc);第二個參數能夠是字符串或者函數(應該要有返回值吧?)
    sString.split(reg);參數能夠是正則表達式,如/\,/:「,」
  3. 元字符:( [ { \ ^ $ | ) ? * + .
  4. 特殊字符:
    \t         製表符
    \n         換行符
    \r         回車符
    \f         換頁符
    \a        alert字符
    \e        escape字符
    \cx      與X相對應的控制字符
    \b        回退字符
    \v        垂直製表符
    \0        空字符
  5. 字符類:
    如下內容是我的的理解,若是您以爲其內容有誤導他人的嫌疑,請留言相告,我會修改的。

    [abc],簡單類:匹配方括號中任一字符,a或b或c;
    ^,負向類:是非的意思,如[^ab]表示匹配不包含a或b的狀況;
    [a-z],範圍類:匹配從a到z的字符。注意該例子不包含A-Z之間的字符,或者你可使用i選項;
    組合類:是由多種類組合而成的字符類。如:[a-k7-8\n],匹配全部a-k以及7-8的字符,以及一個換行符;
  6. 預約義類: 等同於: 匹配
    .                  [^\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]   非單詞字符
  7. 量詞:
    簡單量詞:
    ?  出現零次或一次
    *  出現零次或屢次(任意次數)
    +  出現一次或屢次(至少出現一次)
    {n}  出現n次(固定次數)
    {n,m} 至少出現n次,但不超過m次
    {n,} 至少出現n次
    2008.12.1
  8. 貪婪的、惰性的和支配性的量詞
    貪婪量詞:先看整個字符串是否匹配。若沒有發現匹配,則去掉最後字符串的最後一個字符再嘗試匹配,如此循環,直到發現一個匹配或者字符串不剩一個字符。目前爲止討論的都是貪婪的量詞。
    惰性量詞:先看字符串中的第一個字母是否匹配。若沒有發現匹配,則讀入下一個字符進行匹配嘗試,如此循環,直到發下一個匹配或者整個字符串都檢查過也沒有匹配。它與貪婪量詞的工做方式剛好相反。
    支配量詞:只嘗試匹配整個字符串,若沒有發現匹配,中止嘗試。(返回false)
    貪婪         惰性         支配         描述
    ?               ??            ?+           零次或一次出現
    *                *?             *+           零次或屢次出現
    +               ++            ++           一次或屢次出現
    {n}            {n}?          {n}+        剛好n次出現
    {n,m}       {n,m}?    {n,m}+    至少n次至多m次出現
    {n,}           {n,}?        {n,}+       至少n次出現
    PS:瀏覽器對支配量詞的支持還很不完善。IE和Opera不支持支配量詞,使用會拋出一個錯誤。Mozilla不會產生錯誤,但它會將支配量詞看做是貪婪的。
  9. 分組:經過使用一系列小括號()包圍一系列字符、字符類以及量詞來使用。
     String.prototype.trim = function(){var reg = /^\s+(.*?)\s+$/;return this.replace(reg,$1);}//該方法與其餘語言中的trim()方法同樣,用以除去字符串頭尾的空格。
  10. .1:在完成表達式計算後,每一個分組都被存放在一個特殊的地方以備未來使用。這些存儲在分組中的特殊值,稱之爲反向引用。如:(a?(b?(c?))),第一個反向引用爲(a?(b?(c?))),第二個爲(b?(c?)),第三個爲(c?)。
  11. .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";
  12. 候選操做符,「|」:相似於或操做。
    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";//屏蔽敏感字詞
  13. 建立反向引用的分組稱之爲捕獲性分組,而非捕獲性分組則無需存儲結果;非捕獲性分組建立方法:(?: /*..*/ )
    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"
  14. 前瞻:告訴正則表達式運算器向前看一些字符而不移動其位置,簡單講:當某個特定的字符分組出如今另外一個字符串以前時,纔去捕獲它(或匹配它)。
    前瞻存在正向前瞻和負向前瞻。
    正向前瞻檢查的是接下來出現的是否是某個特定字符集。而負向前瞻則檢查接下來的不該該出現的特定字符集。(兩則相對是非的關係,相關字符是否相連)
  15. 建立正向前瞻要將模式放在(?=和)之間。注意這不是分組,分組不會考慮前瞻的存在。
    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」。
  16. 邊界      描述
    ^            行開頭
    $           行結尾
    \b         單詞的邊界
    \B         非單詞的邊界
  17. 多行模式
    在正則表達式後面添加m選項:/(\d)/gm。將對每行進行匹配而不是隻對全局。多行模式會改變^和&的邊界行爲。
  18. RegExp對象的實例屬性:
    global——Boolean值,表示g(全局選項)是否已設置。
    ignoreCase——Boolean值,表示i(忽略大小寫選項)是否已設置。
    lastIndex——整數,表明下次匹配將會從哪一個字符位置開始(只有當使用exec()或test()函數纔會填入,不然爲0)。
    multiline——Boolean值,表示m(多行模式選項)是否已設置。
    source——正則表達式的源字符串形式。例如,表達式/[ba]*/的source將返回「[ba]*」。
  19. 屬性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;
  20. 靜態的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"
  21. IE和Opera並不支持RegExp.multiline,因此最好單獨的對每一個表達式設置m選項而不要直接設置這個標記。
  22. 日期驗證函數:
    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"
  23. 電子郵件地址驗證函數: function isValidEmail(str){      var reg=/^(?:\w+\.?)*\w+@(?:\w+\.?)*\w+$/;     return reg.test(str);} alert(isValidEmail("ake87#126.com"));        //outputs false
相關文章
相關標籤/搜索