javascript RegExp對象

來源:互聯網
上載者:User

JavaScript提供了一個RegExp對象來完成有關Regex的操作和功能,每一條Regex模式對應一個RegExp執行個體。有兩種方式可以建立RegExp對象的執行個體。

使用RegExp的顯式建構函式,文法為:new RegExp("pattern"[,"flags"])。

使用RegExp的隱式建構函式,採用純文字格式:/pattern/[flags]。

pattern部分為要使用的Regex模式文本,是必須的。在第一種方式中,pattern部分以JavaScript字串的形式存在,需要使用雙引號或單引號括起來;在第二種方式中,pattern部分嵌套在兩個“/”之間,不能使用引號。
flags部分設定Regex的標誌資訊,是可選項。如果設定flags部分,在第一種方式中,以字串的形式存在;在第二種方式中,以文本的形式緊接在最後一個“/”字元之後。flags可以是以下標誌字元的組合。

g是全域標誌。如果設定了這個標誌,對某個文本執行搜尋和替換操作時,將對文本中所有匹配的部分起作用。如果不設定這個標誌,則僅搜尋和替換最早匹配的內容。

i是忽略大小寫標誌。如果設定了這個標誌,進行匹配比較時,將忽略大小寫。

m是多行標誌。如果不設定這個標誌,那麼元字元“^”只與整個被搜尋字串的開始位置相匹配,而元字元“$”只與被搜尋字串的結束位置相匹配。如果設定了這個標誌,“^”還可以與被搜尋字串中的“\n”或“\r”之後的位置(即下一行的行首)相匹配,而“$”還可以與被搜尋字串中的“\n”或“\r”之後的位置(即下一行的行尾)相匹配。

<br /> var myString="這是第一個Regex的例子";<br /> var myregex = new RegExp("一個"); // 建立Regex<br /> if (myregex.test(myString)){<br /> alert("找到了指定的模式!");<br /> }<br /> else{<br /> alert("未找到指定的模式。");<br /> }<br />

運行代碼

由於JavaScript字串中的“\”是一個逸出字元,因此,使用顯式建構函式建立RegExp執行個體對象時,應將原始Regex中的“\”用“\\”替換。例如,在代碼1.2中的兩條語句是等價的。

<br /> var re1 = new RegExp("\\d{5}");<br /> var re2 = /\d{5}/;<br /> alert("re1="+re1+"\nre2="+re2);<br />

運行代碼

由於Regex模式文本中的逸出字元也是“\”,如果Regex中要匹配原義字元“\”,在Regex模式文本中要以“\\”來表示,當使用顯式建構函式的方式建立RegExp執行個體對象的時候,就需要使用“\\\\”來表示原義字元“\”。

var re = new RegExp(\\\\)。
靜態屬性 描述
index 是當前運算式模式最初相符內容的開始位置,從0開始計數。其初始值為-1,每次成功匹配時,index屬性都會隨之改變。
input 返回當前所作用的字串,可以簡寫為$_,初始值為空白字串""。
lastMatch 是當前運算式模式的最後一個匹配字串,可以簡寫為$&。其初始值為空白字串""。在每次成功匹配時,lastMatch屬性值都會隨之改變。
lastParen 如果運算式模式中有括起來的子匹配,是當前運算式模式中最後的子匹配所匹配到的子字串,可以簡寫為$+。其初始值為空白字串""。每次成功匹配時,lastParen屬性值都會隨之改變。
leftContext 是當前運算式模式最後一個匹配字串左邊的所有內容,可以簡寫為$`(其中“'”為鍵盤上“Esc”下邊的反單引號)。初始值為空白字串""。每次成功匹配時,其屬性值都會隨之改變。
rightContext 是當前運算式模式最後一個匹配字串右邊的所有內容,可以簡寫為$’。初始值為空白字串""。每次成功匹配時,其屬性值都會隨之改變。
$1…$9屬性 這些屬性是唯讀。如果運算式模式中有括起來的子匹配,$1…$9屬性值分別是第1個到第9個子匹配所捕獲到的內容。如果有超過9個以上的子匹配,$1…$9屬性分別對應最後的9個子匹配。在一個運算式模式中,可以指定任意多個帶括弧的子匹配,但RegExp對象只能儲存最後的9個子匹配的結果。在RegExp執行個體對象的一些方法所返回的結果數組中,可以獲得所有圓括弧內的子匹配結果。

執行個體屬性 描述
lastIndex 是當前運算式模式最初相符內容中最後一個字元的下一個位置,從0開始計數,常被作為繼續搜尋時的起始位置,初始值為-1,表示從起始位置開始搜尋,每次成功匹配時,lastIndex屬性值都會隨之改變。
global 是當前運算式模式最初相符內容的開始位置,從0開始計數。其初始值為-1,每次成功匹配時,index屬性都會隨之改變。
ignoreCase 返回建立RegExp對象執行個體時指定的ignoreCase標誌(i)的狀態。如果建立RegExp對象執行個體時設定了i標誌,該屬性返回True,否則返回False,預設值為False。
multiLine 返回建立RegExp對象執行個體時指定的multiLine標誌(m)的狀態。如果建立RegExp對象執行個體時設定了m標誌,該屬性返回True,否則返回False,預設值為False。
source 返回建立RegExp對象執行個體時指定的運算式文本字串。

執行個體方法 描述
test 文法格式為test(str)。該方法檢查一個字串中是否存在建立RegExp對象執行個體時所指定的運算式模式,如果存在就返回True,否則返回False。如果找到匹配項,則會更新RegExp對象中的有關靜態屬性,以反映匹配情況。
exec 文法格式為exec(str)。該方法使用建立RegExp對象執行個體時所指定的運算式模式對一個字串進行搜尋,並返回一個包含搜尋結果的數組。
如果為Regex設定了全域標誌(g),可以通過多次調用exec和test方法在字串中進行連續搜尋,每次都是從RegExp對象的lastIndex屬性值指定的位置開始搜尋字串。
如果沒有設定全域標誌(g),則exec和test方法忽略RegExp對象的lastIndex屬性值,從字串的起始位置開始搜尋。
如果exec方法沒有找到匹配,傳回值為null;如果找到匹配,則返回一個數組,並更新RegExp對象中有關靜態屬性以反映匹配情況。返回數組中的元素0包含了完整的匹配結果,而元素1~n依次是運算式模式中定義的各個子匹配的結果。
exec方法返回的數組有3個屬性,分別是input、index和lastIndex。
input屬性是整個被搜尋的字串。
index屬性是指匹配在整個被搜尋字串中的位置。
lastIndex屬性是指匹配的子字串的最後一個字元的下一個字元位置。
compile 文法格式為compile("pattern"[,"flags"])。該方法可以更換RegExp對象執行個體所使用的運算式模式,
並將新的運算式模式編譯為內部格式,從而使以後的匹配過程執行更快。
如果要在迴圈中重複使用某個運算式,對其進行編譯將使執行加速。
但是,如果在程式中使用了任何其他運算式模式後,再使用原來編譯過的運算式模式,則這種編譯毫無益處。

<br /><!doctype html><br /><html dir="ltr" lang="zh-CN"><br /> <head><br /> <meta charset="utf-8"/><br /> <title>正則</title><br /> <style><br /> </style></p><p> <script type="text/javascript" charset="utf-8"><br /> window.onload = function(){</p><p> var strSrc = "xxa1b01c001yya2b02c002zz";<br /> var re = /a(\d)b(\d{2})c(\d{3})/gi;<br /> var arr, count = 0;<br /> while ((arr = re.exec(strSrc)) != null)<br /> {<br /> displayResult();<br /> }<br /> function displayResult()<br /> {<br /> document.write("<p>這是用Regex/<strong style='color:red'>" + re.source + "</strong>/gi對字串<br>\""<br /> + RegExp.input + "\"進行第" + (++count) + "次搜尋的結果:<br>");<br /> document.write("RegExp.index為" + RegExp.index + "<br>");<br /> document.write("RegExp.lastIndex為" + RegExp.lastIndex + "<br>");<br /> document.write("RegExp.lastMatch為" + RegExp.lastMatch + "<br>");<br /> document.write("RegExp.lastParen為" + RegExp.lastParen + "<br>");<br /> document.write("RegExp.leftContext為" + RegExp.leftContext + "<br>");<br /> document.write("RegExp.rightContext為" + RegExp.rightContext + "<br>");<br /> document.write("RegExp.$1為" + RegExp.$1 + "<br>");<br /> document.write("RegExp.$2為" + RegExp.$2 + "<br>");<br /> document.write("RegExp.$3為" + RegExp.$3 + "<br>");<br /> document.write("RegExp.$4為" + RegExp.$4 + "<br>");<br /> document.write("arr.index為" + arr.index + "<br>");<br /> document.write("arr.input為" + arr.input + "<br>");<br /> document.write("arr.lastIndex為" + arr.lastIndex + "<br>");<br /> document.write("返回數組的元素個數為" + arr.length + "<br>");<br /> document.write("返回數組的內容為");<br /> for(var i=0; i<arr.length; i++)<br /> {<br /> if(i < arr.length-1)<br /> document.write("\"" + arr[i] + "\",");<br /> else<br /> document.write("\"" + arr[i] + "\")</p>");<br /> }<br /> }</p><p> }<br /> </script><br /> </head><br /> <body></p><p> </body><br /></html><br />

運行代碼

 var reg = /^$/i  //匹配img標籤\/\*([\s\S])*?\*\/      匹配注釋/^[a-zA-Z0-9][\w\.\-]+@[\w\.\-]+$/\/(?:[^\\[/]|\\.|\[(?:[^\\\]]|\\.)+])+\/[gim]*  正則 rValidURL =  /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;    
//idcardvar isOk = (val == "");if (!isOk) {if ((/^\d{15}$/).test(val)) {isOk = true; } else if ((/^\d{17}[0-9xX]$/).test(val)) {var vs = "1,0,x,9,8,7,6,5,4,3,2".split(","),ps = "7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2".split(","),ss = val.toLowerCase().split(""),r = 0;for (var i = 0; i 
             //驗證身份證    function IDCardCheck(num) {        num = num.toUpperCase();        // 社會安全號碼碼為15位或者18位,15位時全為數字,18位前17位為數字,最後一位是校正位,可能為數字或字元X。        if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {            // alert('輸入的社會安全號碼長度不對,或者號碼不符合規定!\n15位號碼應全為數字,18位號碼末位可以為數字或X。');            return false;        }        // 校正位按照ISO 7064:1983.MOD 11-2的規定產生,X可以認為是數字10。        // 下面分別分析出生日期和校正位        var len, re;        len = num.length;        if (len == 15) {            re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);            var arrSplit = num.match(re);            // 檢查生日日期是否正確            var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);            var bGoodDay;            bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));            if (!bGoodDay) {                // alert('輸入的社會安全號碼裡出生日期不對!');                return false;            }            else {                // 將15位身份證轉成18位                // 校正位按照ISO 7064:1983.MOD 11-2的規定產生,X可以認為是數字10。                var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);                var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');                var nTemp = 0, i;                num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);                for (i = 0; i 

正則學習筆記

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.