BloveSaga

          在希臘帕爾納斯山南坡上,有一個馳名世界的戴爾波伊神托所,在它的入口處的巨石上赫然銹刻著這樣幾個大字: 認識你自己!

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            34 隨筆 :: 12 文章 :: 122 評論 :: 0 Trackbacks

          ?? 正則表達式

          ?.正則表達式及其作用
          ?.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翻譯過來的,英文比中文更能實現(xiàn)其含義,就是符合某種規(guī)則
          ?的表達式??梢詫⒄齽t表達式理解為一種對文件進行模糊匹配的語言,它用一些特殊的符號(稱
          ?為元字符)來代表某種特征(例如,全都是數(shù)字)的一組字符以及指定匹配的次數(shù),含有元字符
          ?的文本不再表示某一具體的文本內(nèi)容,而是形成了一種文本模式,它可以匹配符合這種模式的所
          ?有文本串。
          ?
          ?元字符與子匹配
          ?.元字符
          ?如果一個圖書的編號格式是:要么是5個數(shù)字字符,例如,10101;要么是5個數(shù)字后加上一個連字號
          ?(-),再加上4個數(shù)字組成的10個字符,例如,11111-1234。那么,要在一個大的文本串中查找這
          ?兩種格式的圖書編號時,就可以用\d{5}(-\d{4})?做為匹配模式。
          ?如果要讓abc?中的bc同時受到?的作用,必須使用圓括號將他們括起來,使它們成為一個緊密結(jié)合
          ?的組合項,這樣后面的?就表示圓括號中的內(nèi)容可有可無,例如,a(bc)?能匹配a和abc。

          ?.字匹配
          ?圓口號所括起來的部分為一個子匹配(也叫子表達式),除了可以得到整個正則表達式的匹配
          ?結(jié)果外,還可以單獨得到每個子表達式部分所匹配的結(jié)果。
          ?多個子表達式所匹配的原始內(nèi)容按照它們正則表達式模式中從左到右出現(xiàn)的順序存儲在緩沖區(qū)中
          ?,這種過程稱為捕獲。圓括號中的子匹配所捕獲的內(nèi)容可在整個表達式中位于這個括號之后的
          ?地方被反引用,第一括號(即第一個子匹配)捕獲的內(nèi)容用\1表示,第二個圓括號(即第二個子
          ?匹配)捕獲的內(nèi)容\2表示,依次類推。例如,要匹配2個相同的連續(xù)字符的正則表達式為(\d)\1.
          ?要匹配連續(xù)5個相同的數(shù)字字符的正則表達式為(\d)\1{4}.要匹配1221.3553.6776等數(shù)字??梢?br />?使用正則表達式為(\d)(\d)\2\1。

          ? 正則表達式的作用
          ?.測試字符串是否匹配某個模式,從而實現(xiàn)數(shù)據(jù)格式的有效性驗證。
          ?.將一段文本中滿足某一正則表達式模式的文本內(nèi)容替換為別的內(nèi)容或刪除(即替換為空字符串)
          ? 例如,將一大段文本中的所有的19xx年的內(nèi)容替換為20xx年,其中xx部分是兩個任意的數(shù)字,
          ? 不會被替換,但不能簡單地用20替換19,否則1919就被替換為2020。
          ?.在一段文本中搜索具有某一類型特征的文本內(nèi)容。精確搜索和正則表達式的模式搜索最大的區(qū)
          ? 別就是:精確搜索是搜索一個具體的文本,而模式搜索是模式搜索具有某一類型特征的文本。

          ?
          ? RegExp對象
          ?JavaScript中提供了一個名為RegExp的對象來完成有關正則表達式的操作和功能,每一條正則
          ?表達式模式對應一個RegExp對象實例。

          ?創(chuàng)建RegExp對象實例
          ?(1)使用RegExp對象的顯示構(gòu)造函數(shù),語法為:new RegExp("pattern"[,"flags"]);
          ?(2)使用RegExp對象的隱式構(gòu)造函數(shù),采用純粹的文本格式:/pattern/[flags]
          ?
          ?flags標志字符:
          ???? -g 用做全局標志
          ???? -i 用做忽略大小寫標志
          ???? -m 用做多行標志
          ???? 如果沒有設置這個標志,那么元字符"^"只與整個被搜索字符串的開始位置相匹配,而元字符
          ???? "$"只與整個被搜索字符串的結(jié)束位置相匹配。如果設置了這個標志,那么"^"還可以與被
          ???? 搜索字符串中的"\n"或"\r"之后的位置相匹配。
          ? 注意:
          ? 當使用構(gòu)造函數(shù)的方式創(chuàng)建RegExp實例對象的時候,應將原始的正則表達式模式文本中的每個
          ? "\"都使用"\\"來替換,例如,下面的語句等價:
          ?? var re=new RegExp("\\d{5}");
          ?? var re=^d{5}/

          ?RegExp對象-屬性
          ?.所有RegExp對象實例共享靜態(tài)屬性
          ?.單個對象實例的屬性
          ?靜態(tài)屬性:
          ?.index
          ?.input
          ?.lastIndex
          ?.lastMatch
          ?.lastParen
          ?.lastContext
          ?.leftContext
          ?.rightContext
          ?.$1...$9

          ?對象實例屬性:
          ?.global
          ?.ignoreCase
          ?.multiline
          ?.source

          ?RegExp對象-方法
          ?.test方法
          ?語法格式為:test(str)。檢查一個字符串中是否存在創(chuàng)建RegExp對象實例所指定的正則表達式模式
          ?.exec方法
          ?語法格式為:exec(str)。使用創(chuàng)建RegExp對象實例時所指定的正則表達式模式對一個字符串執(zhí)行
          ?搜索,并返回一個包含搜索結(jié)果的數(shù)組。
          ?.compile方法
          ?語法格式為:compile("pattern"[,"flags"])。更換RegExp對象實例所使用的正則表達式模式,并
          ?將新的正則表達式模式編譯為內(nèi)部格式,從而使以后的匹配過程執(zhí)行更快。

          ?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)+ "次搜索的結(jié)果:<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("返回的元素個數(shù)為"+arr.length+"<br>");
          ????? document.write("返回數(shù)組的類容為[");
          ????? 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方法類似,它使用正則表達式模式對字符串執(zhí)行
          ?搜索,并返回一個包含搜索結(jié)果的數(shù)組。
          ?<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)。使用正則表達式模式對字符串執(zhí)行搜索,并對搜索
          ?到的內(nèi)容用指定的字符串替換,返回值包含替換后的內(nèi)容的字符串對象。

          posted on 2006-06-15 18:06 藍色Saga 閱讀(220) 評論(0)  編輯  收藏 所屬分類: Java Scripting Study
          主站蜘蛛池模板: 耿马| 临汾市| 武宣县| 鄂伦春自治旗| 大荔县| 嘉鱼县| 扬州市| 湟中县| 通榆县| 伊通| 微博| 于都县| 湖南省| 荣成市| 上思县| 揭阳市| 南充市| 米易县| 延津县| 金溪县| 平泉县| 长白| 凤山市| 丽江市| 罗定市| 汤原县| 乌什县| 大关县| 兴义市| 调兵山市| 大港区| 潢川县| 社会| 蓬安县| 遵化市| 彭泽县| 湘乡市| 赞皇县| 佳木斯市| 上思县| 攀枝花市|