色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

js中的正則表達(dá)式(一)

瀏覽:102日期:2024-05-25 09:14:57
字符含意做為轉(zhuǎn)意,即通常在''后面的字符不按原來(lái)意義解釋,如/b/匹配字符'b',當(dāng)b前面加了反斜桿后/b/,轉(zhuǎn)意為匹配一個(gè)單詞的邊界。-或-對(duì)正則表達(dá)式功能字符的還原,如'*'匹配它前面元字符0次或多次,/a*/將匹配a,aa,aaa,加了''后,/a*/將只匹配'a*'。^匹配一個(gè)輸入或一行的開(kāi)頭,/^a/匹配'an A',而不匹配'An a'$匹配一個(gè)輸入或一行的結(jié)尾,/a$/匹配'An a',而不匹配'an A'*匹配前面元字符0次或多次,/ba*/將匹配b,ba,baa,baaa+匹配前面元字符1次或多次,/ba*/將匹配ba,baa,baaa?匹配前面元字符0次或1次,/ba*/將匹配b,ba(x)匹配x保存x在名為$1...$9的變量中x|y匹配x或y{n}精確匹配n次{n,}匹配n次以上{n,m}匹配n-m次[xyz]字符集(character set),匹配這個(gè)集合中的任一一個(gè)字符(或元字符)[^xyz]不匹配這個(gè)集合中的任何一個(gè)字符[b]匹配一個(gè)退格符b匹配一個(gè)單詞的邊界B匹配一個(gè)單詞的非邊界cX這兒,X是一個(gè)控制符,/cM/匹配Ctrl-Md匹配一個(gè)字?jǐn)?shù)字符,/d/ = /[0-9]/D匹配一個(gè)非字?jǐn)?shù)字符,/D/ = /[^0-9]/n匹配一個(gè)換行符r匹配一個(gè)回車符s匹配一個(gè)空白字符,包括n,r,f,t,v等S匹配一個(gè)非空白字符,等于/[^nfrtv]/t匹配一個(gè)制表符v匹配一個(gè)重直制表符w匹配一個(gè)可以組成單詞的字符(alphanumeric,這是我的意譯,含數(shù)字),包括下劃線,如[w]匹配'$5.98'中的5,等于[a-zA-Z0-9]W匹配一個(gè)不可以組成單詞的字符,如[W]匹配'$5.98'中的$,等于[^a-zA-Z0-9]。用re = new RegExp('pattern',['flags']) 的方式比較好pattern : 正則表達(dá)式flags: g (全文查找出現(xiàn)的所有 pattern)i (忽略大小寫)m (多行查找)vaScript動(dòng)態(tài)正則表達(dá)式問(wèn)題請(qǐng)問(wèn)正則表達(dá)式可以動(dòng)態(tài)生成嗎?例如JavaScript中:var str = 'strTemp';要生成:var re = /strTemp/;如果是字符連接:var re = '/' + str + '/'即可但是要生成表達(dá)式,可以實(shí)現(xiàn)嗎?怎樣實(shí)現(xiàn)?正則表達(dá)式是一個(gè)描述字符模式的對(duì)象。JavaScript的RegExp對(duì)象和String對(duì)象定義了使用正則表達(dá)式來(lái)執(zhí)行強(qiáng)大的模式匹配和文本檢索與替換函數(shù)的方法.

在JavaScript中,正則表達(dá)式是由一個(gè)RegExp對(duì)象表示的.當(dāng)然,可以使用一個(gè)RegExp()構(gòu)造函數(shù)來(lái)創(chuàng)建RegExp對(duì)象,也可以用JavaScript 1.2中的新添加的一個(gè)特殊語(yǔ)法來(lái)創(chuàng)建RegExp對(duì)象.就像字符串直接量被定義為包含在引號(hào)內(nèi)的字符一樣,正則表達(dá)式直接量也被定義為包含在一對(duì)斜杠(/)之間的字符.所以,JavaScript可能會(huì)包含如下的代碼:

var pattern = /s$/;

這行代碼創(chuàng)建一個(gè)新的RegExp對(duì)象,并將它賦給變量parttern.這個(gè)特殊的RegExp對(duì)象和所有以字母's'結(jié)尾的字符串都匹配.用RegExp()也可以定義一個(gè)等價(jià)的正則表達(dá)式,代碼如下:

var pattern = new RegExp('s$');

無(wú)論是用正則表達(dá)式直接量還是用構(gòu)造函數(shù)RegExp(),創(chuàng)建一個(gè)RegExp對(duì)象都是比較容易的.較為困難的任務(wù)是用正則表達(dá)式語(yǔ)法來(lái)描述字符的模式.JavaScript采用的是Perl語(yǔ)言正則表達(dá)式語(yǔ)法的一個(gè)相當(dāng)完整的子集.

正則表達(dá)式的模式規(guī)范是由一系列字符構(gòu)成的.大多數(shù)字符(包括所有字母數(shù)字字符)描述的都是按照字面意思進(jìn)行匹配的字符.這樣說(shuō)來(lái),正則表達(dá)式/java/就和所有包含子串 'java' 的字符串相匹配.雖然正則表達(dá)式中的其它字符不是按照字面意思進(jìn)行匹配的,但它們都具有特殊的意義.正則表達(dá)式 /s$/ 包含兩個(gè)字符.第一個(gè)特殊字符 's' 是按照字面意思與自身相匹配.第二個(gè)字符 '$' 是一個(gè)特殊字符,它所匹配的是字符串的結(jié)尾.所以正則表達(dá)式 /s$/ 匹配的就是以字母 's' 結(jié)尾的字符串.

1.直接量字符

我們已經(jīng)發(fā)現(xiàn)了,在正則表達(dá)式中所有的字母字符和數(shù)字都是按照字面意思與自身相匹配的.JavaScript的正則表達(dá)式還通過(guò)以反斜杠()開(kāi)頭的轉(zhuǎn)義序列支持某些非

字母字符.例如,序列 'n' 在字符串中匹配的是一個(gè)直接量換行符.在正則表達(dá)式中,許多標(biāo)點(diǎn)符號(hào)都有特殊的含義.下面是這些字符和它們的含義:

正則表達(dá)式的直接量字符

字符 匹配________________________________字母數(shù)字字符 自身 f 換頁(yè)符 n 換行符 r 回車 t 制表符 v 垂直制表符 / 一個(gè) / 直接量 一個(gè) 直接量 . 一個(gè) . 直接量 * 一個(gè) * 直接量 + 一個(gè) + 直接量 ? 一個(gè) ? 直接量 | 一個(gè) | 直接量 ( 一個(gè) ( 直接量 ) 一個(gè) ) 直接量 [ 一個(gè) [ 直接量 ] 一個(gè) ] 直接量 { 一個(gè) { 直接量 } 一個(gè) } 直接量 XXX 由十進(jìn)制數(shù) XXX 指 定的ASCII碼字符 Xnn 由十六進(jìn)制數(shù) nn 指定的ASCII碼字符 cX 控制字符^X. 例如, cI等價(jià)于 t, cJ等價(jià)于 n

___________________________________________________

如果想在正則表達(dá)式中使用特殊的標(biāo)點(diǎn)符號(hào),必須在它們之前加上一個(gè) '' .

2.字符類

將單獨(dú)的直接符放進(jìn)中括號(hào)內(nèi)就可以組合成字符類.一個(gè)字符類和它所包含的任何一個(gè)字符都匹配,所以正則表達(dá)式 / [abc] / 和字母 'a' , 'b' , 'c' 中的任何一個(gè)都匹配.另外還可以定義否定字符類,這些類匹配的是除那些包含在中括號(hào)之內(nèi)的字符外的所有字符.定義否定字符尖時(shí),要將一個(gè) ^ 符號(hào)作為從左中括號(hào)算起的第一個(gè)字符.正則表達(dá)式的集合是 / [a-zA-z0-9] / .

由于某些字符類非常常用,所以JavaScript的正則表達(dá)式語(yǔ)法包含一些特殊字符和轉(zhuǎn)義序列來(lái)表示這些常用的類.例如, s 匹配的是空格符,制表符和其它空白符, s匹配的則是空白符之外的任何字符.

正則表灰式的字符類

字符 匹配____________________________________________________[...] 位于括號(hào)之內(nèi)的任意字符[^...] 不在括號(hào)之中的任意字符. 除了換行符之外的任意字符,等價(jià)于[^n]w 任何單字字符, 等價(jià)于[a-zA-Z0-9]W 任何非單字字符,等價(jià)于[^a-zA-Z0-9]s 任何空白符,等價(jià)于[ t n r f v]S 任何非空白符,等價(jià)于[^ t n r f v]d 任何數(shù)字,等價(jià)于[0-9]D 除了數(shù)字之外的任何字符,等價(jià)于[^0-9][b] 一個(gè)退格直接量(特例)________________________________________________________________

3.復(fù)制

用以上的正則表式的語(yǔ)法,可以把兩位數(shù)描述成 / d d /,把四位數(shù)描述成 / d d d d /.但我們還沒(méi)有一種方法可以用來(lái)描述具有任意多數(shù)位的數(shù)字或者是一個(gè)

字符串.這個(gè)串由三個(gè)字符以及跟隨在字母之后的一位數(shù)字構(gòu)成.這些復(fù)雜的模式使用的正則表達(dá)式語(yǔ)法指定了該表達(dá)式中每個(gè)元素要重復(fù)出現(xiàn)的次數(shù).

指定復(fù)制的字符總是出現(xiàn)在它們所作用的模式后面.由于某種復(fù)制類型相當(dāng)常用.所以有一些特殊的字符專門用于表示它們.例如: +號(hào)匹配的就是復(fù)制前一模式一次

或多次的模式.下面的表列出了復(fù)制語(yǔ)法.先看一個(gè)例子:

/d{2, 4}/ //匹配2到4間的數(shù)字.

/w{3} d?/ //匹配三個(gè)單字字符和一個(gè)任意的數(shù)字.

/s+javas+/ //匹配字符串'java' ,并且該串前后可以有一個(gè)或多個(gè)空格.

/[^'] * / //匹配零個(gè)或多個(gè)非引號(hào)字符.

正則表達(dá)式的復(fù)制字符

字符 含義__________________________________________________________________{n, m} 匹配前一項(xiàng)至少n次,但是不能超過(guò)m次{n, } 匹配前一項(xiàng)n次,或者多次{n} 匹配前一項(xiàng)恰好n次? 匹配前一項(xiàng)0次或1次,也就是說(shuō)前一項(xiàng)是可選的. 等價(jià)于 {0, 1}+ 匹配前一項(xiàng)1次或多次,等價(jià)于{1,}* 匹配前一項(xiàng)0次或多次.等價(jià)于{0,}___________________________________________________________________

4.選擇,分組和引用

正則表達(dá)式的語(yǔ)法還包括指定選擇項(xiàng),對(duì)子表達(dá)式分組和引用前一子表達(dá)式的特殊字符.字符| 用于分隔供選擇的字符.例如: /ab|cd|ef/ 匹配的是字符串 'ab',或者是

字符串 'cd',又或者 'ef'. /d{3}|[a-z]{4}/ 匹配的是要么是一個(gè)三位數(shù),要么是四個(gè)小寫字母.在正則表達(dá)式中括號(hào)具有幾種作用.它的主要作用是把單獨(dú)的項(xiàng)目分組

成子表達(dá)式,以便可以像處理一個(gè)獨(dú)立的單元那種用 *、+或? 來(lái)處理那些項(xiàng)目.例如: /java(script) ?/ 匹配的是字符串 'java',其后既可以有 'script',也可以沒(méi)有. /

(ab|cd) + |ef) / 匹配的既可以是字符串 'ef',也可以是字符串'ab' 或者 'cd' 的一次或多次重復(fù).

在正則表達(dá)式中,括號(hào)的第二個(gè)用途是在完整的模式中定義子模式。當(dāng)一個(gè)正則表達(dá)式成功地和目標(biāo)字符串相匹配時(shí),可以從目標(biāo)串中抽出和括號(hào)中的子模式相匹配

的部分.例如,假定我們正在檢索的模式是一個(gè)或多個(gè)字母后面跟隨一位或多位數(shù)字,那么我們可以使用模式 / [a-z] + d+/.但是由于假定我們真正關(guān)心的是每個(gè)匹配

尾部的數(shù)字,那么如果我們將模式的數(shù)字部分放在括號(hào)中 (/ [a-z] + (d+)/) ,我們就可以從所檢索到的任何匹配中抽取數(shù)字了,之后我們會(huì)對(duì)此進(jìn)行解析的.

代括號(hào)的子表達(dá)式的另一個(gè)用途是,允許我們?cè)谕徽齽t表達(dá)式的后面引用前面的子表達(dá)式.這是通過(guò)在字符串 后加一位或多位數(shù)字來(lái)實(shí)現(xiàn)的.數(shù)字指的是代括號(hào)的

子表達(dá)式在正則表達(dá)式中的位置.例如: 1 引用的是第一個(gè)代括號(hào)的子表達(dá)式. 3 引用的是第三個(gè)代括號(hào)的子表達(dá)式.注意,由于子表達(dá)式可以嵌套在其它子表達(dá)式中,

所以它的位置是被計(jì)數(shù)的左括號(hào)的位置.例如:在下面的正則表達(dá)式被指定為 2:/([Jj]ava([Ss]cript)) sis s (funw*) /

對(duì)正則表達(dá)式中前一子表達(dá)式的引用所指定的并不是那個(gè)子表達(dá)式的模式,而是與那個(gè)模式相匹配的文本.這樣,引用就不只是幫助你輸入正則表達(dá)式的重復(fù)部分的快

捷方式了,它還實(shí)施了一條規(guī)約,那就是一個(gè)字符串各個(gè)分離的部分包含的是完全相同的字符.例如:下面的正則表達(dá)式匹配的就是位于單引號(hào)或雙引號(hào)之內(nèi)的所有字

符.但是,它要求開(kāi)始和結(jié)束的引號(hào)匹配(例如兩個(gè)都是雙引號(hào)或者都是單引號(hào)):/[’ '] [^ ’ ']*[’ ']/

如果要求開(kāi)始和結(jié)束的引號(hào)匹配,我們可以使用如下的引用:/( [’ '] ) [^ ’ '] * 1/

1匹配的是第一個(gè)代括號(hào)的子表達(dá)式所匹配的模式.在這個(gè)例子中,它實(shí)施了一種規(guī)約,那就是開(kāi)始的引號(hào)必須和結(jié)束的引號(hào)相匹配.注意,如果反斜杠后跟隨的數(shù)字比

代括號(hào)的子表達(dá)式數(shù)多,那么它就會(huì)被解析為一個(gè)十進(jìn)制的轉(zhuǎn)義序列,而不是一個(gè)引用.你可以堅(jiān)持使用完整的三個(gè)字符來(lái)表示轉(zhuǎn)義序列,這們就可以避免混淆了.例如,

使用 044,而不是44.下面是正則表達(dá)式的選擇、分組和引用字符:

字符 含義____________________________________________________________________| 選擇.匹配的要么是該符號(hào)左邊的子表達(dá)式,要么它右邊的子表達(dá)式(...) 分組.將幾個(gè)項(xiàng)目分為一個(gè)單元.這個(gè)單元可由 *、+、?和|等符號(hào)使用,而且還可以記住和這個(gè)組匹配的字符以供此后引

用使用n 和第n個(gè)分組所匹配的字符相匹配.分組是括號(hào)中的子表達(dá)式(可能是嵌套的).分組號(hào)是從左到右計(jì)數(shù)的左括號(hào)數(shù)____________________________________________________________________

5.指定匹配的位置

我們已經(jīng)看到了,一個(gè)正則表達(dá)式中的許多元素才能夠匹配字符串的一個(gè)字符.例如: s 匹配的只是一個(gè)空白符.還有一些正則表達(dá)式的元素匹配的是字符之間寬度為

0的空間,而不是實(shí)際的字符例如: b 匹配的是一個(gè)詞語(yǔ)的邊界,也就是處于一個(gè)/w字字符和一個(gè)w非字字符之間的邊界.像b 這樣的字符并不指定任何一個(gè)匹配了的

字符串中的字符,它們指定的是匹配所發(fā)生的合法位置.有時(shí)我們稱這些元素為正則表達(dá)式的錨.因?yàn)樗鼈儗⒛J蕉ㄎ辉跈z索字符串中的一個(gè)特定位置.最常用的錨元

素是 ^, 它使模式依賴于字符串的開(kāi)頭,而錨元素$則使模式定位在字符串的末尾.

例如:要匹配詞 'javascript' ,我們可以使用正則表達(dá)式 /^ javascript $/. 如果我們想檢索 'java' 這個(gè)詞自身 (不像在 'javascript' 中那樣作為前綴),那么我們可以使

用模式 /s java s /, 它要求在詞語(yǔ)java之前和之后都有空格.但是這樣作有兩個(gè)問(wèn)題.第一: 如果 'java' 出現(xiàn)在一個(gè)字符的開(kāi)頭或者是結(jié)尾.該模式就不會(huì)與之匹配,除

非在開(kāi)頭和結(jié)尾處有一個(gè)空格. 第二: 當(dāng)這個(gè)模式找到一個(gè)與之匹配的字符時(shí),它返回的匹配的字符串前端和后端都有空格,這并不是我們想要的.因此,我們使用詞語(yǔ)

的邊界 b 來(lái)代替真正的空格符 s 進(jìn)行匹配. 結(jié)果表達(dá)式是 /b java b/.下面是正則表達(dá)式的錨字符:

字符 含義____________________________________________________________________^ 匹配的是字符的開(kāi)頭,在多行檢索中,匹配的是一行的開(kāi)頭$ 匹配的是字符的結(jié)尾,在多行檢索中,匹配的是一行的結(jié)尾b 匹配的是一個(gè)詞語(yǔ)的邊界.簡(jiǎn)而言之就是位于字符w 和 w之間的位置(注意:[b]匹配的是退格符)B 匹配的是非詞語(yǔ)的邊界的字符_____________________________________________________________________

6.屬性

有關(guān)正則表達(dá)式的語(yǔ)法還有最后一個(gè)元素,那就是正則表達(dá)式的屬性,它說(shuō)明的是高級(jí)模式匹配的規(guī)則.和其它正則表達(dá)式語(yǔ)法不同,屬性是在 / 符號(hào)之外說(shuō)明的.即它

們不出現(xiàn)在兩個(gè)斜杠之間,而是位于第二個(gè)斜杠之后.javascript 1.2支持兩個(gè)屬性.屬性 i 說(shuō)明模式匹配應(yīng)該是大小寫不敏感的.屬性 g 說(shuō)明模式匹配應(yīng)該是全局的.也

就是說(shuō),應(yīng)該找出被檢索的字符串中所有的匹配.這兩種屬性聯(lián)合起來(lái)就可以執(zhí)行一個(gè)全局的,大小寫不敏感的匹配.

例如: 要執(zhí)行一個(gè)大小不敏感的檢索以找到詞語(yǔ) 'java' (或者是 'java' 、'JAVA'等) 的第一個(gè)具體值,我們可以使用大小不敏感的正則表達(dá)式 /b javab/i .如果要在

一個(gè)字符串中找到 'java' 所有的具體值,我們還可以添加屬性 g, 即 /b java b/gi .

以下是正則表達(dá)式的屬性:

字符 含義_________________________________________i 執(zhí)行大小寫不敏感的匹配g 執(zhí)行一個(gè)全局的匹配,簡(jiǎn)而言之,就是找到所有的匹配,而不是在找到第一個(gè)之后就停止了_________________________________________

除屬性 g 和 i 之外,正則表達(dá)式就沒(méi)有其它像屬性一樣的特性了.如果將構(gòu)造函數(shù) RegExp 的靜態(tài)屬性 multiline 設(shè)置為 true ,那么模式匹配將以多行的模式進(jìn)行.在這

種模式下,錨字符 ^ 和 $ 匹配的不只是檢索字符串的開(kāi)頭和結(jié)尾,還匹配檢索字符串內(nèi)部的一行的開(kāi)頭和結(jié)尾.例如: 模式 /Java$/ 匹配的是 'Java',但是并不匹配

'Javanis fun' .如果我們?cè)O(shè)置了 multiline 屬性,那么后者也將被匹配:

RegExp.multiline = true;

在JAVASCRIPT里面判斷一個(gè)字符串是否是電子郵件的格式:

if(formname.email.value!=formname.email.value.match(/^w +[@]w +[.][w.] +$/)){alert('您的電子郵件格式錯(cuò)誤!');formname.email.focus();return false;}

[RED]function dateVerify(date){var reg = /^(d{4})(-)(d{2})2(d{2})$/;var r = date.match(reg);if(r==null) return false;var d= new Date(r[1], r[3]-1,r[4]);var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate();date=r[1]+r[2]+((r[3]-1)+1)+r[2]+((r[4]-1)+1);return newStr==date;}[/RED]

javascript的17種正則表達(dá)式'^d+$'//非負(fù)整數(shù)(正整數(shù) + 0)'^[0-9]*[1-9][0-9]*$'//正整數(shù)'^((-d+)|(0+))$'//非正整數(shù)(負(fù)整數(shù) + 0)'^-[0-9]*[1-9][0-9]*$'//負(fù)整數(shù)'^-?d+$'//整數(shù)'^d+(.d+)?$'//非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) + 0)'^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$'//正浮點(diǎn)數(shù)'^((-d+(.d+)?)|(0+(.0+)?))$'//非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù) + 0)'^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$'//負(fù)浮點(diǎn)數(shù)'^(-?d+)(.d+)?$'//浮點(diǎn)數(shù)'^[A-Za-z]+$'//由26個(gè)英文字母組成的字符串'^[A-Z]+$'//由26個(gè)英文字母的大寫組成的字符串'^[a-z]+$'//由26個(gè)英文字母的小寫組成的字符串'^[A-Za-z0-9]+$'//由數(shù)字和26個(gè)英文字母組成的字符串'^w+$'//由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串'^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$'//email地址'^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$'//url
標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 在线播放人成午夜免费视频 | 欧美一二三区视频 | 欧美另类性视频 | 国产亚洲一区二区三区在线观看 | 中文字幕无线码中文字幕网站 | 在线观看a网站 | 亚洲香蕉影院 | 日本在线观看免费视频网址 | 亚洲精品久久九九精品 | 免费永久在线观看黄网 | 国产久视频 | 91香蕉成人免费高清网站 | 久草在线看 | 亚洲欧美日韩中文字幕在线 | 高清韩国a级特黄毛片 | 国产黄a三级三级看三级 | 精品欧美小视频在线观看 | 三级亚洲| 国产免费a级片 | 国产精品香蕉一区二区三区 | 国产福利三区 | 91久久国产露脸精品免费 | 国产一级成人毛片 | 欧美午夜影院 | 国产一级毛片夜一级毛片 | 国产大片线上免费观看 | 最新版天堂资源中文官网 | 国产精品视频永久免费播放 | 午夜成人免费影院 | 久久免费高清视频 | 国产成人黄色 | 欧美成人综合 | 黄色网址网站 | 国产日韩久久久精品影院首页 | 亚洲经典在线观看 | 国产在线高清视频 | 国产在线观看免费 | 国产精品情人露脸在线观看 | 国产精品成人久久久 | 久久夜视频 | 欧美日韩在线观看免费 |