a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 編程 > Regex > 正文

javascript RegExp對(duì)象(正則表達(dá)式)

2020-03-16 21:16:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
JavaScript提供了一個(gè)RegExp對(duì)象來(lái)完成有關(guān)正則表達(dá)式的操作和功能,每一條正則表達(dá)式模式對(duì)應(yīng)一個(gè)RegExp實(shí)例。有兩種方式可以創(chuàng)建RegExp對(duì)象的實(shí)例。
 
 
使用RegExp的顯式構(gòu)造函數(shù),語(yǔ)法為:new RegExp("pattern"[,"flags"])。 
使用RegExp的隱式構(gòu)造函數(shù),采用純文本格式:/pattern/[flags]。 
pattern部分為要使用的正則表達(dá)式模式文本,是必須的。在第一種方式中,pattern部分以JavaScript字符串的形式存在,需要使用雙引號(hào)或單引號(hào)括起來(lái);在第二種方式中,pattern部分嵌套在兩個(gè)“/”之間,不能使用引號(hào)。 
flags部分設(shè)置正則表達(dá)式的標(biāo)志信息,是可選項(xiàng)。如果設(shè)置flags部分,在第一種方式中,以字符串的形式存在;在第二種方式中,以文本的形式緊接在最后一個(gè)“/”字符之后。flags可以是以下標(biāo)志字符的組合。 
g是全局標(biāo)志。如果設(shè)置了這個(gè)標(biāo)志,對(duì)某個(gè)文本執(zhí)行搜索和替換操作時(shí),將對(duì)文本中所有匹配的部分起作用。如果不設(shè)置這個(gè)標(biāo)志,則僅搜索和替換最早匹配的內(nèi)容。 
i是忽略大小寫標(biāo)志。如果設(shè)置了這個(gè)標(biāo)志,進(jìn)行匹配比較時(shí),將忽略大小寫。 
m是多行標(biāo)志。如果不設(shè)置這個(gè)標(biāo)志,那么元字符“^”只與整個(gè)被搜索字符串的開(kāi)始位置相匹配,而元字符“$”只與被搜索字符串的結(jié)束位置相匹配。如果設(shè)置了這個(gè)標(biāo)志,“^”還可以與被搜索字符串中的“/n”或“/r”之后的位置(即下一行的行首)相匹配,而“$”還可以與被搜索字符串中的“/n”或“/r”之后的位置(即下一行的行尾)相匹配。 
代碼8.1是一個(gè)創(chuàng)建正則表達(dá)式的例子。 
代碼8.1 創(chuàng)建正則表達(dá)式:8.1.htm 
  1. <html>  
  2. <head>  
  3. <title>創(chuàng)建正則表達(dá)式 </title>  
  4. <script language = "JavaScript">  
  5. var myString="這是第一個(gè)正則表達(dá)式的例子";  
  6. var myregex = new RegExp("一個(gè)"); // 創(chuàng)建正則表達(dá)式  
  7. if (myregex.test(myString)){  
  8. document.write("找到了指定的模式!");  
  9. }  
  10. else{  
  11. document.write("未找到指定的模式。");  
  12. }  
  13. </script>  
  14. </head><body></body>  
  15. </html>  

上面代碼的運(yùn)行結(jié)果如圖8.1所示。 
由于JavaScript字符串中的“/”是一個(gè)轉(zhuǎn)義字符,因此,使用顯式構(gòu)造函數(shù)創(chuàng)建RegExp實(shí)例對(duì)象時(shí),應(yīng)將原始正則表達(dá)式中的“/”用“//”替換。例如,在代碼8.2中的兩條語(yǔ)句是等價(jià)的。 
代碼8.2 轉(zhuǎn)義字符中的“/”:8.2.htm 
<script language="javascript"> 
var re1 = new RegExp("//d{5}"); 
var re2 = //d{5}/; 
alert("re1="+re1+"/nre2="+re2); 
</script> 
程序顯示結(jié)果如圖8.2所示??梢钥闯?,兩者結(jié)果相同。 
由于正則表達(dá)式模式文本中的轉(zhuǎn)義字符也是“/”,如果正則表達(dá)式中要匹配原義字符“/”,在正則表達(dá)式模式文本中要以“//”來(lái)表示,當(dāng)使用顯式構(gòu)造函數(shù)的方式創(chuàng)建RegExp實(shí)例對(duì)象的時(shí)候,就需要使用“////”來(lái)表示原義字符“/”。 
var re = new RegExp(////)。 
8.4 RegExp對(duì)象的屬性 
RegExp對(duì)象的屬性分為靜態(tài)屬性和實(shí)例屬性。下面分別進(jìn)行介紹。 
8.4.1 靜態(tài)屬性 
(1)index屬性。是當(dāng)前表達(dá)式模式首次匹配內(nèi)容的開(kāi)始位置,從0開(kāi)始計(jì)數(shù)。其初始值為-1,每次成功匹配時(shí),index屬性都會(huì)隨之改變。 
(2)input屬性。返回當(dāng)前所作用的字符串,可以簡(jiǎn)寫為$_,初始值為空字符串""。 
(3)lastIndex屬性。是當(dāng)前表達(dá)式模式首次匹配內(nèi)容中最后一個(gè)字符的下一個(gè)位置,從0開(kāi)始計(jì)數(shù),常被作為繼續(xù)搜索時(shí)的起始位置,初始值為-1,表示從起始位置開(kāi)始搜索,每次成功匹配時(shí),lastIndex屬性值都會(huì)隨之改變。 
(4)lastMatch屬性。是當(dāng)前表達(dá)式模式的最后一個(gè)匹配字符串,可以簡(jiǎn)寫為$&。其初始值為空字符串""。在每次成功匹配時(shí),lastMatch屬性值都會(huì)隨之改變。 
(5)lastParen屬性。如果表達(dá)式模式中有括起來(lái)的子匹配,是當(dāng)前表達(dá)式模式中最后的子匹配所匹配到的子字符串,可以簡(jiǎn)寫為$+。其初始值為空字符串""。每次成功匹配時(shí),lastParen屬性值都會(huì)隨之改變。 
(6)leftContext屬性。是當(dāng)前表達(dá)式模式最后一個(gè)匹配字符串左邊的所有內(nèi)容,可以簡(jiǎn)寫為$`(其中“'”為鍵盤上“Esc”下邊的反單引號(hào))。初始值為空字符串""。每次成功匹配時(shí),其屬性值都會(huì)隨之改變。 
(7)rightContext屬性。是當(dāng)前表達(dá)式模式最后一個(gè)匹配字符串右邊的所有內(nèi)容,可以簡(jiǎn)寫為$'。初始值為空字符串""。每次成功匹配時(shí),其屬性值都會(huì)隨之改變。 
(8)$1…$9屬性。這些屬性是只讀的。如果表達(dá)式模式中有括起來(lái)的子匹配,$1…$9屬性值分別是第1個(gè)到第9個(gè)子匹配所捕獲到的內(nèi)容。如果有超過(guò)9個(gè)以上的子匹配,$1…$9屬性分別對(duì)應(yīng)最后的9個(gè)子匹配。在一個(gè)表達(dá)式模式中,可以指定任意多個(gè)帶括號(hào)的子匹配,但RegExp對(duì)象只能存儲(chǔ)最后的9個(gè)子匹配的結(jié)果。在RegExp實(shí)例對(duì)象的一些方法所返回的結(jié)果數(shù)組中,可以獲得所有圓括號(hào)內(nèi)的子匹配結(jié)果。 
8.4.2 實(shí)例屬性 
(1)global屬性。返回創(chuàng)建RegExp對(duì)象實(shí)例時(shí)指定的global標(biāo)志(g)的狀態(tài)。如果創(chuàng)建RegExp對(duì)象實(shí)例時(shí)設(shè)置了g標(biāo)志,該屬性返回True,否則返回False,默認(rèn)值為False。 
(2)ignoreCase屬性。返回創(chuàng)建RegExp對(duì)象實(shí)例時(shí)指定的ignoreCase標(biāo)志(i)的狀態(tài)。如果創(chuàng)建RegExp對(duì)象實(shí)例時(shí)設(shè)置了i標(biāo)志,該屬性返回True,否則返回False,默認(rèn)值為False。 
(3)multiLine屬性。返回創(chuàng)建RegExp對(duì)象實(shí)例時(shí)指定的multiLine標(biāo)志(m)的狀態(tài)。如果創(chuàng)建RegExp對(duì)象實(shí)例時(shí)設(shè)置了m標(biāo)志,該屬性返回True,否則返回False,默認(rèn)值為False。 
(4)source屬性。返回創(chuàng)建RegExp對(duì)象實(shí)例時(shí)指定的表達(dá)式文本字符串。 
8.5 RegExp對(duì)象的方法 
RegExp對(duì)象的常用方法有test、exec和compile,本節(jié)介紹這些方法的功能和用法。最后,對(duì)RegExp對(duì)象的屬性和方法進(jìn)行一個(gè)綜合舉例。 
8.5.1 test方法 
語(yǔ)法格式為test(str)。該方法檢查一個(gè)字符串中是否存在創(chuàng)建RegExp對(duì)象實(shí)例時(shí)所指定的表達(dá)式模式,如果存在就返回True,否則返回False。如果找到匹配項(xiàng),則會(huì)更新RegExp對(duì)象中的有關(guān)靜態(tài)屬性,以反映匹配情況。關(guān)于該方法的使用,后面的8.10節(jié)中會(huì)經(jīng)常用到,這里不再單獨(dú)舉例。 
8.5.2 exec方法 
語(yǔ)法格式為exec(str)。該方法使用創(chuàng)建RegExp對(duì)象實(shí)例時(shí)所指定的表達(dá)式模式對(duì)一個(gè)字符串進(jìn)行搜索,并返回一個(gè)包含搜索結(jié)果的數(shù)組。 
如果為正則表達(dá)式設(shè)置了全局標(biāo)志(g),可以通過(guò)多次調(diào)用exec和test方法在字符串中進(jìn)行連續(xù)搜索,每次都是從RegExp對(duì)象的lastIndex屬性值指定的位置開(kāi)始搜索字符串。 
如果沒(méi)有設(shè)置全局標(biāo)志(g),則exec和test方法忽略RegExp對(duì)象的lastIndex屬性值,從字符串的起始位置開(kāi)始搜索。 
如果exec方法沒(méi)有找到匹配,返回值為null;如果找到匹配,則返回一個(gè)數(shù)組,并更新RegExp對(duì)象中有關(guān)靜態(tài)屬性以反映匹配情況。返回?cái)?shù)組中的元素0包含了完整的匹配結(jié)果,而元素1~n依次是表達(dá)式模式中定義的各個(gè)子匹配的結(jié)果。 
exec方法返回的數(shù)組有3個(gè)屬性,分別是input、index和lastIndex。 
input屬性是整個(gè)被搜索的字符串。 
index屬性是指匹配在整個(gè)被搜索字符串中的位置。 
lastIndex屬性是指匹配的子字符串的最后一個(gè)字符的下一個(gè)字符位置。 
代碼8.3是對(duì)該方法的應(yīng)用舉例。 
代碼8.3 exec()方法應(yīng)用:8.3.htm 
  1. <html>  
  2. <head>  
  3. <title>exec()方法應(yīng)用</title>  
  4. <script language = "JavaScript">  
  5. var myString="aaa 111 bbb 222 ccc 1111 222ddd";  
  6. var regex = /111/; //創(chuàng)建正則表達(dá)式對(duì)象  
  7. var array=regex.exec(myString);  
  8. if (array){  
  9. var str="找到了匹配子串!"+"/n返回?cái)?shù)組的值為:"+array+"/n數(shù)組元素個(gè)數(shù):"  
  10. +array.length+"/n被搜索的字符串為:"+array.input  
  11. +"/n匹配子串的開(kāi)始位置為:"+array.index  
  12. +"/n匹配子串后面第一個(gè)字符的位置為:"+regex.lastIndex;  
  13. alert(str);  
  14. }  
  15. else{  
  16. alert("未找到匹配子串??!");  
  17. }  
  18. </script>  
  19. <body></body>  
  20. </html>  

上面代碼的運(yùn)行結(jié)果如圖8.3所示。 
圖8.3 運(yùn)行結(jié)果 
8.5.3 compile方法 
語(yǔ)法格式為compile("pattern"[,"flags"])。該方法可以更換RegExp對(duì)象實(shí)例所使用的表達(dá)式模式,并將新的表達(dá)式模式編譯為內(nèi)部格式,從而使以后的匹配過(guò)程執(zhí)行更快。如果要在循環(huán)中重復(fù)使用某個(gè)表達(dá)式,對(duì)其進(jìn)行編譯將使執(zhí)行加速。但是,如果在程序中使用了任何其他表達(dá)式模式后,再使用原來(lái)編譯過(guò)的表達(dá)式模式,則這種編譯毫無(wú) 益處
 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品久久久久久中文字 | 国产视频中文字幕 | 久久免费小视频 | 日韩精品在线观看一区二区 | 日韩精品免费观看 | 国产精品自产av一区二区三区 | 99久久免费精品国产男女性高好 | 依人久久 | 久草福利在线视频 | 能免费看av的网站 | 高清国产午夜精品久久久久久 | 亚洲成人一区二区 | 日本精品久久久久久久 | 不卡视频一区二区三区 | 午夜视频在线观看免费视频 | 国产三级日本三级美三级 | 国产成人精品在线观看 | www精品 | 国产成在线观看免费视频 | 日韩免费视频 | www.国产| 精品成人在线 | 韩日一级片| 成人国产免费视频 | 日韩精品视频免费看 | 男女瑟瑟| 欧美精品久久一区 | 精品久久国产 | 欧美亚洲一区二区三区 | 中文字幕在线观看www | 91人人澡人人爽 | 精品国模一区二区三区欧美 | 男女视频在线观看 | 国产成人午夜片在线观看高清观看 | 久久久综合视频 | 亚洲视频一区二区在线 | 羞羞av| 特级淫片裸体免费看 | 日韩精品一区二区在线观看 | 蜜桃久久av| 日韩在线免费视频 |