版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、正則表達式是一個描述字符模式的對象。 JavaScript的RegExp對象和String對象定義了使用正則表達式來執(zhí)行強大的模式匹配和文本檢索與替換函數(shù)的方法. ''* '' JavaScript/ '' ''* 在JavaScript中,正則表達式是由一個RegExp對象表示的.當然,可以使用一個RegExp()構造函數(shù)來創(chuàng)建RegExp對象, 也可以用JavaScript 1.2中的新添加的一個特殊語法來創(chuàng)建RegExp對象.就像字符串直接量被定義為包含在引號內的字符一樣, 正則表達式直接量也被定義為包含在一對斜杠(/)之間
2、的字符.所以,JavaScript可能會包含如下的代碼: var pattern = /s$/; 這行代碼創(chuàng)建一個新的RegExp對象,并將它賦給變量parttern.這個特殊的RegExp對象和所有以字母"s"結尾的字符串都匹配.用RegExp()也可以定義 一個等價的正則表達式,代碼如下: var pattern = new RegExp("s$"); 無論是用正則表達式直接量還是用構造函數(shù)RegExp(),創(chuàng)建一個RegExp對象都是比較容易的.較為困難的任務是用正則表達式語法來描述字符的模式. JavaScript采用的是Perl語言正則表達式語
3、法的一個相當完整的子集. 正則表達式的模式規(guī)范是由一系列字符構成的.大多數(shù)字符(包括所有字母數(shù)字字符)描述的都是按照字面意思進行匹配的字符.這樣說來,正則表達式/java/就和 所有包含子串 "java" 的字符串相匹配.雖然正則表達式中的其它字符不是按照字面意思進行匹配的,但它們都具有特殊的意義.正則表達式 /s$/ 包含兩個字符. 第一個特殊字符 "s" 是按照字面意思與自身相匹配.第二個字符 "$" 是一個特殊字符,它所匹配的是字符串的結尾.所以正則表達式 /s$/ 匹配的就是以字母 "s" 結尾 的字符串.
4、 1.直接量字符 我們已經(jīng)發(fā)現(xiàn)了,在正則表達式中所有的字母字符和數(shù)字都是按照字面意思與自身相匹配的.JavaScript的正則表達式還通過以反斜杠()開頭的轉義序列支持某些非 字母字符.例如,序列 "n" 在字符串中匹配的是一個直接量換行符.在正則表達式中,許多標點符號都有特殊的含義.下面是這些字符和它們的含義: 正則表達式的直接量字符 字符 匹配 _ 字母數(shù)字字符 自身 f 換頁符 n 換行符 r 回車 t 制表符 v 垂直制表符 / 一個 / 直接量 一個 直接量 . 一個 . 直接量 * 一個 * 直接量 + 一個 + 直接量 ? 一個 ? 直接量 | 一個 | 直接
5、量 ( 一個 ( 直接量 ) 一個 ) 直接量 一個 直接量 一個 直接量 一個 直接量 一個 直接量 XXX 由十進制數(shù) XXX 指 定的ASCII碼字符 Xnn 由十六進制數(shù) nn 指定的ASCII碼字符 cX 控制字符X. 例如, cI等價于 t, cJ等價于 n _ 如果想在正則表達式中使用特殊的標點符號,必須在它們之前加上一個 "" . 2.字符類 將單獨的直接符放進中括號內就可以組合成字符類.一個字符類和它所包含的任何一個字符都匹配,所以正則表達式 / abc / 和字母 "a" , "b" , "c"
6、 中的任何一個 都匹配.另外還可以定義否定字符類,這些類匹配的是除那些包含在中括號之內的字符外的所有字符.定義否定字符尖時,要將一個 符號作為從左中括號算起的第 一個字符.正則表達式的集合是 / a-zA-z0-9 / . 由于某些字符類非常常用,所以JavaScript的正則表達式語法包含一些特殊字符和轉義序列來表示這些常用的類.例如, s 匹配的是空格符,制表符和其它空白符, s 匹配的則是空白符之外的任何字符. 正則表灰式的字符類 字符 匹配 _ . 位于括號之內的任意字符 . 不在括號之中的任意字符 . 除了換行符之外的任意字符,等價于n w 任何單字字符, 等價于a-zA-Z0-9
7、W 任何非單字字符,等價于a-zA-Z0-9 s 任何空白符,等價于 t n r f v S 任何非空白符,等價于 t n r f v d 任何數(shù)字,等價于0-9 D 除了數(shù)字之外的任何字符,等價于0-9 b 一個退格直接量(特例) _ 3.復制 用以上的正則表式的語法,可以把兩位數(shù)描述成 / d d /,把四位數(shù)描述成 / d d d d /.但我們還沒有一種方法可以用來描述具有任意多數(shù)位的數(shù)字或者是一個 字符串.這個串由三個字符以及跟隨在字母之后的一位數(shù)字構成.這些復雜的模式使用的正則表達式語法指定了該表達式中每個元素要重復出現(xiàn)的次數(shù). 指定復制的字符總是出現(xiàn)在它們所作用的模式后面.由于某
8、種復制類型相當常用.所以有一些特殊的字符專門用于表示它們.例如: +號匹配的就是復制前一模式一次 或多次的模式.下面的表列出了復制語法.先看一個例子: /d2, 4/ /匹配2到4間的數(shù)字. /w3 d?/ /匹配三個單字字符和一個任意的數(shù)字. /s+javas+/ /匹配字符串"java" ,并且該串前后可以有一個或多個空格. /" * / /匹配零個或多個非引號字符. 正則表達式的復制字符 字符 含義 _ n, m 匹配前一項至少n次,但是不能超過m次 n, 匹配前一項n次,或者多次 n 匹配前一項恰好n次 ? 匹配前一項0次或1次,也就是說前一項是可選的.
9、等價于 0, 1 + 匹配前一項1次或多次,等價于1, * 匹配前一項0次或多次.等價于0, _ 4.選擇,分組和引用 正則表達式的語法還包括指定選擇項,對子表達式分組和引用前一子表達式的特殊字符.字符| 用于分隔供選擇的字符.例如: /ab|cd|ef/ 匹配的是字符串 "ab",或者是 字符串 "cd",又或者 "ef". /d3|a-z4/ 匹配的是要么是一個三位數(shù),要么是四個小寫字母.在正則表達式中括號具有幾種作用.它的主要作用是把單獨的項目分組 成子表達式,以便可以像處理一個獨立的單元那種用 *、+或? 來處理那些項目.例如
10、: /java(script) ?/ 匹配的是字符串 "java",其后既可以有 "script",也可以沒有. / (ab|cd) + |ef) / 匹配的既可以是字符串 "ef",也可以是字符串"ab" 或者 "cd" 的一次或多次重復. 在正則表達式中,括號的第二個用途是在完整的模式中定義子模式。當一個正則表達式成功地和目標字符串相匹配時,可以從目標串中抽出和括號中的子模式相匹配 的部分.例如,假定我們正在檢索的模式是一個或多個字母后面跟隨一位或多位數(shù)字,那么我們可以使用模式 / a-z
11、+ d+/.但是由于假定我們真正關心的是每個匹配 尾部的數(shù)字,那么如果我們將模式的數(shù)字部分放在括號中 (/ a-z + (d+)/) ,我們就可以從所檢索到的任何匹配中抽取數(shù)字了,之后我們會對此進行解析的. 代括號的子表達式的另一個用途是,允許我們在同一正則表達式的后面引用前面的子表達式.這是通過在字符串 后加一位或多位數(shù)字來實現(xiàn)的.數(shù)字指的是代括號的 子表達式在正則表達式中的位置.例如: 1 引用的是第一個代括號的子表達式. 3 引用的是第三個代括號的子表達式.注意,由于子表達式可以嵌套在其它子表達式中, 所以它的位置是被計數(shù)的左括號的位置. 例如:在下面的正則表達式被指定為 2: /(Jj
12、ava(Sscript) sis s (funw*) / 對正則表達式中前一子表達式的引用所指定的并不是那個子表達式的模式,而是與那個模式相匹配的文本.這樣,引用就不只是幫助你輸入正則表達式的重復部分的快 捷方式了,它還實施了一條規(guī)約,那就是一個字符串各個分離的部分包含的是完全相同的字符.例如:下面的正則表達式匹配的就是位于單引號或雙引號之內的所有字 符.但是,它要求開始和結束的引號匹配(例如兩個都是雙引號或者都是單引號): /'' " '' "*'' "/ 如果要求開始和結束的引號匹配,我們可以使用如下的引用: /
13、( '' " ) '' " * 1/ 1匹配的是第一個代括號的子表達式所匹配的模式.在這個例子中,它實施了一種規(guī)約,那就是開始的引號必須和結束的引號相匹配.注意,如果反斜杠后跟隨的數(shù)字比 代括號的子表達式數(shù)多,那么它就會被解析為一個十進制的轉義序列,而不是一個引用.你可以堅持使用完整的三個字符來表示轉義序列,這們就可以避免混淆了.例如, 使用 044,而不是44.下面是正則表達式的選擇、分組和引用字符: 字符 含義 _ | 選擇.匹配的要么是該符號左邊的子表達式,要么它右邊的子表達式 (.) 分組.將幾個項目分為一個單元.這個單元可由 *、+
14、、?和|等符號使用,而且還可以記住和這個組匹配的字符以供此后引 用使用 n 和第n個分組所匹配的字符相匹配.分組是括號中的子表達式(可能是嵌套的).分組號是從左到右計數(shù)的左括號數(shù) _ 5.指定匹配的位置 我們已經(jīng)看到了,一個正則表達式中的許多元素才能夠匹配字符串的一個字符.例如: s 匹配的只是一個空白符.還有一些正則表達式的元素匹配的是字符之間寬度為 0的空間,而不是實際的字符例如: b 匹配的是一個詞語的邊界,也就是處于一個/w字字符和一個w非字字符之間的邊界.像b 這樣的字符并不指定任何一個匹配了的 字符串中的字符,它們指定的是匹配所發(fā)生的合法位置.有時我們稱這些元素為正則表達式的錨.因
15、為它們將模式定位在檢索字符串中的一個特定位置.最常用的錨元 素是 , 它使模式依賴于字符串的開頭,而錨元素$則使模式定位在字符串的末尾. 例如:要匹配詞 "javascript" ,我們可以使用正則表達式 / javascript $/. 如果我們想檢索 "java" 這個詞自身 (不像在 "javascript" 中那樣作為前綴),那么我們可以使 用模式 /s java s /, 它要求在詞語java之前和之后都有空格.但是這樣作有兩個問題.第一: 如果 "java" 出現(xiàn)在一個字符的開頭或者是結尾.該模式就不會
16、與之匹配,除 非在開頭和結尾處有一個空格. 第二: 當這個模式找到一個與之匹配的字符時,它返回的匹配的字符串前端和后端都有空格,這并不是我們想要的.因此,我們使用詞語 的邊界 b 來代替真正的空格符 s 進行匹配. 結果表達式是 /b java b/. 下面是正則表達式的錨字符: 字符 含義 _ 匹配的是字符的開頭,在多行檢索中,匹配的是一行的開頭 $ 匹配的是字符的結尾,在多行檢索中,匹配的是一行的結尾 b 匹配的是一個詞語的邊界.簡而言之就是位于字符w 和 w之間的位置(注意:b匹配的是退格符) B 匹配的是非詞語的邊界的字符 _ 6.屬性 有關正則表達式的語法還有最后一個元素,那就是正則
17、表達式的屬性,它說明的是高級模式匹配的規(guī)則.和其它正則表達式語法不同,屬性是在 / 符號之外說明的.即它 們不出現(xiàn)在兩個斜杠之間,而是位于第二個斜杠之后.javascript 1.2支持兩個屬性.屬性 i 說明模式匹配應該是大小寫不敏感的.屬性 g 說明模式匹配應該是全局的.也 就是說,應該找出被檢索的字符串中所有的匹配.這兩種屬性聯(lián)合起來就可以執(zhí)行一個全局的,大小寫不敏感的匹配. 例如: 要執(zhí)行一個大小不敏感的檢索以找到詞語 "java" (或者是 "java" 、"JAVA"等) 的第一個具體值,我們可以使用大小不敏感的正則表達式
18、 /b javab/i .如果要在 一個字符串中找到 "java" 所有的具體值,我們還可以添加屬性 g, 即 /b java b/gi . 以下是正則表達式的屬性: 字符 含義 _ i 執(zhí)行大小寫不敏感的匹配 g 執(zhí)行一個全局的匹配,簡而言之,就是找到所有的匹配,而不是在找到第一個之后就停止了 _ 除屬性 g 和 i 之外,正則表達式就沒有其它像屬性一樣的特性了.如果將構造函數(shù) RegExp 的靜態(tài)屬性 multiline 設置為 true ,那么模式匹配將以多行的模式進行.在這 種模式下,錨字符 和 $ 匹配的不只是檢索字符串的開頭和結尾,還匹配檢索字符串內部的一行的開
19、頭和結尾.例如: 模式 /Java$/ 匹配的是 "Java",但是并不匹配 "Javanis fun" .如果我們設置了 multiline 屬性,那么后者也將被匹配: RegExp.multiline = true; JScript中正則表達函數(shù)的說明與應用 作為模式匹配下文本替換、搜索、提取的強有力工具,正則表達式(Regular Expression)的應用已經(jīng)從unix平臺逐漸滲入到網(wǎng)絡開發(fā)中了,作為服務器端/客戶端的腳本開發(fā)語言JScript,正越來越多將正則表達式應用融入其中,以彌補自身在文本上處理能力的不足。在此,我們以JScript5.
20、5版本為例,對其中的正則表達式的應用作一個概述。首先我們需要區(qū)分JScript中關于正則表達式的兩個對象:Regular Expression對象和RegExp對象。前者僅包含一個特定的正則表達式實例的信息,而后者通過一個全局變量的屬性來反映最近模式匹配的特性。前者在匹配前需要指定匹配模式,即創(chuàng)建一個Regular Expression對象的實例,而后可以把它傳遞給一個字符串方法,或是把一個字符串作為參數(shù)傳遞給這個Regular Expression實例的方法;而后者無需創(chuàng)建,它是一個固有的全局對象,每次成功匹配操作結果信息被保存在這個對象的屬性中。一、RegExp對象的屬性:反應最近一次成功
21、匹配的結果信息input :保存執(zhí)行匹配的字符串(被搜索的目標字符串)(>=IE4)index :保存匹配的首字符的位置*>=IE4)lastIndex :保存匹配的字符串的下一個字符的位置(>=IE4)lastMatch($&) :保存匹配到的字符串(>=IE5.5)lastParen($+) :保存匹配結果最后一個子匹配的內容(最后一個括號的匹配內容)(>=IE5.5)leftContext($) :保存目標字符串中匹配子字符串前的所有字符 (>=IE5.5)rightContext($'):保存目標字符串中匹配子字符串后的所有字符 (&
22、gt;=IE5.5)$1 - $9 :保存匹配中最開始的9個子匹配(即最開始的9個括號內的匹配結果)(>=IE4)二、Regular Expression對象簡介1.Regular Expression對象定義在腳本中使用正則表達式模式匹配,首先腰設定匹配模式,方法有如下兩種(1)rgExp=/pattern*/flags*(2)rgExp=new RegExp("pattern","flags")注意:a.后者模式中的轉義字符“”需要用“”表示,用以抵消JS中轉義字符""的意義,否則JS首先作為自己的轉義概念來解釋"
23、"后的字符。b.flags標識有以下幾個(至JScript 5.5版本) g:設定當前匹配為全局模式 i:忽略匹配中的大小寫檢測 m:多行搜索模式2.Regular Expression對象屬性(1)rgExp.lastIndex:匹配結果后面一個字符的位置,同RegExp.lastIndex(2)rgExp.source:reExp對象的正則表達式匹配模式3.Regular Expression對象方法(1)rgEpile(pattern,flags)將rgExp轉化為內部格式,以加快匹配的執(zhí)行,這對于大量模式一致的匹配更有效(2)rgExp.exec(str)按照rgExp的匹配
24、模式對str字符串進行匹配查找,當rgExp對象中設定了全局搜索模式(g),則匹配查找從RegExp對象lastIndex屬性所指定的目標字符串位置開始;若沒有設置全局搜索,則從目標字符串第一個字符開始搜索。若沒有任何匹配發(fā)生,返回null。需要注意的是該方法將匹配結果放在一個數(shù)組內返回,該數(shù)組有三個屬性input:包含目標字符串,同RegExp.indexindex:匹配到的子字符串在目標字符串中的位置,同RegExp.indexlastIndex:匹配到的子字符串后面一個字符的位置,同RegExp.lastIndex(3)rgExp.test(str)返回布爾值來反映被查找的目標字符串st
25、r中是否存在符合匹配的模式。該方法不改變RegExp的屬性4.與正則表達式相關的方法主要是指字符串對象中應用模式匹配的方法(1)stringObj.match(rgExp)根據(jù)rgExp對象的正則表達式模式查找字符串stringObj中的匹配字符項,將結果以數(shù)組形式返回。該數(shù)組有三個屬性值,與exec方法返回的數(shù)組屬性相同。若沒有任何匹配,返回null。需要注意的是,若rgExp對象未設定全局匹配模式,則數(shù)組0下標元素為匹配的整體內容,19包含了子匹配得到的字符。若設定了全局模式,則數(shù)組包含了搜索到的所有整體匹配項。(2)stringObj.replace(rgExp, replaceText
26、)返回一個字符串,即將stringObj中符合rgExp模式匹配的字符串替換成replaceText后返回。需要注意的是stringObj本身并不因為替換操作而改變。若期望stringObj中所有符合正則表達式模式的字符串被替換,則在建立正則表達式模式時要設定為全局模式。(3)stringObj.search(rgExp)返回第一個匹配到的子字符串的位置符號名詞解釋:位置:表示子字符串與目標字符串首字符的偏移reExp:表示一個Regular Expression對象實例stringObj:表示一個字符串對象pattern:正則表達式模式flags:匹配操作的模式標識在實際web程序開發(fā)中我們
27、可以有針對性的使用正則表達式來達到我們字符串處理的要求如下附上四個使用正則表達式的JScript例程,這些例子主要用來熟悉正則表達式的使用。1.email地址有效性檢測<script language='JScript'>function validateEmail(emailStr) var re=/w.-+(0-9a-zw-+.)+a-z2,3$/i; /或 var re=new RegExp("w.-+(0-9a-zw-+.)+a-z2,3$","i"); if(re.test(emailStr) alert("
28、;有效email地址!"); return true; else alert("無效email地址!"); return false; </script>2.字符串替換操作<script language='JScript'>var r, pattern, re;var s = "The rain in Spain falls mainly in the plain falls."pattern = /falls/ig;re = s.replace(re,'falling');alert(
29、's = ' + s + 'n' + 're = ' + re);</script>3.模式查找字符串<script language='JScript'>var index, pattern;var str = "four for fall fell fallen fallsing fall falls waterfalls "pattern = /bfallsb/i;index = str.search(pattern);alert('The position of matc
30、h is at ' + index);</script>3.正則表達式屬性例程<script language='JScript'>function matchAttrib() var s='' var re = new RegExp("d(b+)(d)","ig"); var str = "cdbBbdbsbdbdz" while(arr = re.exec(str)!=null) s += "=<br>" s += "$1 returns: " + RegExp.$1 + "<br>" s += "$2 returns: " + RegExp.$2 + "<br>" s += "$3 returns: " + RegExp.$3 + "<br>"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個人房屋裝修合同樣本
- 2025合同模板會員入會合同細則范本
- 教育機構中如何通過巖棉防火系統(tǒng)提升安全性
- 機械采購類供貨方案、售后方案(技術方案)
- 二零二四年圖書館圖書采購合同:高校圖書館外借服務協(xié)議3篇
- 合同授權委托管理制度
- 2025年湘教版選擇性必修1物理下冊月考試卷含答案
- 二零二五年度生態(tài)農(nóng)業(yè)綜合開發(fā)項目合同范本3篇
- 2025年人教新課標高一地理上冊月考試卷
- 2025年冀教新版九年級語文下冊月考試卷
- 五年級上冊寒假作業(yè)答案(人教版)
- 2025年山東浪潮集團限公司招聘25人高頻重點提升(共500題)附帶答案詳解
- 2024年財政部會計法律法規(guī)答題活動題目及答案一
- 2025年江西省港口集團招聘筆試參考題庫含答案解析
- (2024年)中國傳統(tǒng)文化介紹課件
- 液化氣安全檢查及整改方案
- 《冠心病》課件(完整版)
- 2024年云網(wǎng)安全應知應會考試題庫
- 公園保潔服務投標方案
- 光伏電站項目合作開發(fā)合同協(xié)議書三方版
- 2024年秋季新滬教版九年級上冊化學課件 第2章 空氣與水資源第1節(jié) 空氣的組成
評論
0/150
提交評論