?? 正則表達式
?.正則表達式及其作用
?.RegExp對象
?.String對象中與正則表達式有關的方法
?.正則表達式的語法參考
?.實用程序舉例
?什么是正則表達式?
?.文件路徑通配符
?"?"通配符匹配文件名中的單個字符,而"'"通配符匹配零個或多個字符。data?.dat就是一中文
?本模式,它能匹配data1.dat,data2.dat,datax.dat,dataN.dat等文件名。data*.dat是另一種文
?本模式,它匹配data.dat,data1.dat,data2.dat,data12.dat,datax.dat等文件名。
?
?.正則表達式
?是由英文詞語regular expression翻譯過來的,英文比中文更能實現其含義,就是符合某種規則
?的表達式。可以將正則表達式理解為一種對文件進行模糊匹配的語言,它用一些特殊的符號(稱
?為元字符)來代表某種特征(例如,全都是數字)的一組字符以及指定匹配的次數,含有元字符
?的文本不再表示某一具體的文本內容,而是形成了一種文本模式,它可以匹配符合這種模式的所
?有文本串。
?
?元字符與子匹配
?.元字符
?如果一個圖書的編號格式是:要么是5個數字字符,例如,10101;要么是5個數字后加上一個連字號
?(-),再加上4個數字組成的10個字符,例如,11111-1234。那么,要在一個大的文本串中查找這
?兩種格式的圖書編號時,就可以用\d{5}(-\d{4})?做為匹配模式。
?如果要讓abc?中的bc同時受到?的作用,必須使用圓括號將他們括起來,使它們成為一個緊密結合
?的組合項,這樣后面的?就表示圓括號中的內容可有可無,例如,a(bc)?能匹配a和abc。
?.字匹配
?圓口號所括起來的部分為一個子匹配(也叫子表達式),除了可以得到整個正則表達式的匹配
?結果外,還可以單獨得到每個子表達式部分所匹配的結果。
?多個子表達式所匹配的原始內容按照它們正則表達式模式中從左到右出現的順序存儲在緩沖區中
?,這種過程稱為捕獲。圓括號中的子匹配所捕獲的內容可在整個表達式中位于這個括號之后的
?地方被反引用,第一括號(即第一個子匹配)捕獲的內容用\1表示,第二個圓括號(即第二個子
?匹配)捕獲的內容\2表示,依次類推。例如,要匹配2個相同的連續字符的正則表達式為(\d)\1.
?要匹配連續5個相同的數字字符的正則表達式為(\d)\1{4}.要匹配1221.3553.6776等數字。可以
?使用正則表達式為(\d)(\d)\2\1。
? 正則表達式的作用
?.測試字符串是否匹配某個模式,從而實現數據格式的有效性驗證。
?.將一段文本中滿足某一正則表達式模式的文本內容替換為別的內容或刪除(即替換為空字符串)
? 例如,將一大段文本中的所有的19xx年的內容替換為20xx年,其中xx部分是兩個任意的數字,
? 不會被替換,但不能簡單地用20替換19,否則1919就被替換為2020。
?.在一段文本中搜索具有某一類型特征的文本內容。精確搜索和正則表達式的模式搜索最大的區
? 別就是:精確搜索是搜索一個具體的文本,而模式搜索是模式搜索具有某一類型特征的文本。
?
? RegExp對象
?JavaScript中提供了一個名為RegExp的對象來完成有關正則表達式的操作和功能,每一條正則
?表達式模式對應一個RegExp對象實例。
?創建RegExp對象實例
?(1)使用RegExp對象的顯示構造函數,語法為:new RegExp("pattern"[,"flags"]);
?(2)使用RegExp對象的隱式構造函數,采用純粹的文本格式:/pattern/[flags]
?
?flags標志字符:
???? -g 用做全局標志
???? -i 用做忽略大小寫標志
???? -m 用做多行標志
???? 如果沒有設置這個標志,那么元字符"^"只與整個被搜索字符串的開始位置相匹配,而元字符
???? "$"只與整個被搜索字符串的結束位置相匹配。如果設置了這個標志,那么"^"還可以與被
???? 搜索字符串中的"\n"或"\r"之后的位置相匹配。
? 注意:
? 當使用構造函數的方式創建RegExp實例對象的時候,應將原始的正則表達式模式文本中的每個
? "\"都使用"\\"來替換,例如,下面的語句等價:
?? var re=new RegExp("\\d{5}");
?? var re=^d{5}/
?RegExp對象-屬性
?.所有RegExp對象實例共享靜態屬性
?.單個對象實例的屬性
?靜態屬性:
?.index
?.input
?.lastIndex
?.lastMatch
?.lastParen
?.lastContext
?.leftContext
?.rightContext
?.$1...$9
?對象實例屬性:
?.global
?.ignoreCase
?.multiline
?.source
?RegExp對象-方法
?.test方法
?語法格式為:test(str)。檢查一個字符串中是否存在創建RegExp對象實例所指定的正則表達式模式
?.exec方法
?語法格式為:exec(str)。使用創建RegExp對象實例時所指定的正則表達式模式對一個字符串執行
?搜索,并返回一個包含搜索結果的數組。
?.compile方法
?語法格式為:compile("pattern"[,"flags"])。更換RegExp對象實例所使用的正則表達式模式,并
?將新的正則表達式模式編譯為內部格式,從而使以后的匹配過程執行更快。
?RegExp對象-綜合舉例
?code:
<script language="javascript">
??? var strSrc="xxa1b01c001yya2b02c002zz";
??? var re="/a(\d)b(\d{2})c(\d{3})/gi";
??? var arr,count=0;
??? while((arr = re.exec(strSrc))!=null)
??? {
?????? displayResult();
??? }
??? function displayResult()
??? {
????? document.write(<p>這是用正則表達式/"+re.source+"/gi對字符串<br>\""
???????????????? +RegExp.input+ "\"進行第" +(++count)+ "次搜索的結果:<br>");
????? document.write("RegExp.index為"+RegExp.index+"<br>");
????? document.write("RegExp.lastindex為"+RegExp.lastindex+"<br>");
????? document.write("RegExp.lastMatch為"+RegExp.lastMatch+"<br>");
????? document.write("RegExp.lastParen為"+RegExp.lastParen+"<br>");
????? document.write("RegExp.lastContext為"+RegExp.lastContext+"<br>");
????? document.write("RegExp.$1為"+RegExp.$1+"<br>");
????? document.write("RegExp.$1為"+RegExp.$2+"<br>");
????? document.write("RegExp.$1為"+RegExp.$3+"<br>");
????? document.write("RegExp.$1為"+RegExp.$4+"<br>");
????? document.write("arr.index為"+arr.index+"<br>");
????? document.write("arr.input為"+arr.input+"<br>");
????? document.write("arr.lastindex為"+arr.lastindex+"<br>");
????? document.write("返回的元素個數為"+arr.length+"<br>");
????? document.write("返回數組的類容為[");
????? for(var i=0;i<arr.length;i++)
????? {
???????? if(arr.length-1)
??????????? document.write("\""+arr[i]+"\",");
???????? else
??????????? document.write("\""+arr[i]+"\"]</p>");
????? }
?????
??? }
?</script>
?
?String對象中與正則表達式有關的方法
?.match方法
?語法格式為:match(Exp)。與RegExp對象的exec方法類似,它使用正則表達式模式對字符串執行
?搜索,并返回一個包含搜索結果的數組。
?<script language="javascript">
?? var strSrc="xxa1b01c001yya2b02c002zz";
?? var re=/a(\d)b(\d(2))c(\d{3})/gi;
?? var arr;
?? arr=strSrc.match(re);
?? for(var i=0;i<arr.length;i++)
?? {
????? if(i<arr.length-1)
???????? document.write("[\""+arr[i]+"\",");
????? else
???????? document.write("\""+arr[i]+"\"]");
?? }
?</script>
?
?.search方法
?語法格式為:serach(rgExp)。返回使用正則表達式搜索時,第一個匹配的字符串在整個被搜索
?的字符串中的位置。
?.replace方法
?語法格式為: replace(rgExp,replaceText)。使用正則表達式模式對字符串執行搜索,并對搜索
?到的內容用指定的字符串替換,返回值包含替換后的內容的字符串對象。