日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

正则表达式(一)

發(fā)布時(shí)間:2024/6/21 综合教程 48 生活家
生活随笔 收集整理的這篇文章主要介紹了 正则表达式(一) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.1 普通字符

字母、數(shù)字、漢字、下劃線、以及后邊章節(jié)中沒(méi)有特殊定義的標(biāo)點(diǎn)符號(hào),都是"普通字符"。表達(dá)式中的普通字符,在匹配一個(gè)字符串的時(shí)候,匹配與之相同的一個(gè)字符。舉例1:表達(dá)式 "c",在匹配字符串 "abcde" 時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是:"c";匹配到的位置是:開(kāi)始于2,結(jié)束于3。(注:下標(biāo)從0開(kāi)始還是從1開(kāi)始,因當(dāng)前編程語(yǔ)言的不同而可能不同)舉例2:表達(dá)式 "bcd",在匹配字符串 "abcde" 時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是:"bcd";匹配到的位置是:開(kāi)始于1,結(jié)束于4。


1.2 簡(jiǎn)單的轉(zhuǎn)義字符

一些不便書(shū)寫(xiě)的字符,采用在前面加 "/" 的方法。這些字符其實(shí)我們都已經(jīng)熟知了。

表達(dá)式

可匹配

/r, /n

代表回車和換行符

/t

制表符

//

代表 "/" 本身

還有其他一些在后邊章節(jié)中有特殊用處的標(biāo)點(diǎn)符號(hào),在前面加 "/" 后,就代表該符號(hào)本身。比如:^, $ 都有特殊意義,如果要想匹配字符串中 "^" 和 "$" 字符,則表達(dá)式就需要寫(xiě)成 "/^" 和 "/$"。

表達(dá)式

可匹配

/^

匹配 ^ 符號(hào)本身

/$

匹配 $ 符號(hào)本身

/.

匹配小數(shù)點(diǎn)(.)本身

這些轉(zhuǎn)義字符的匹配方法與 "普通字符" 是類似的。也是匹配與之相同的一個(gè)字符。舉例1:表達(dá)式 "/$d",在匹配字符串 "abc$de" 時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是:"$d";匹配到的位置是:開(kāi)始于3,結(jié)束于5。


1.3 能夠與 '多種字符' 匹配的表達(dá)式

正則表達(dá)式中的一些表示方法,可以匹配 '多種字符' 其中的任意一個(gè)字符。比如,表達(dá)式 "/d" 可以匹配任意一個(gè)數(shù)字。雖然可以匹配其中任意字符,但是只能是一個(gè),不是多個(gè)。這就好比玩撲克牌時(shí)候,大小王可以代替任意一張牌,但是只能代替一張牌。

表達(dá)式

可匹配

/d

任意一個(gè)數(shù)字,0~9 中的任意一個(gè)

/w

任意一個(gè)字母或數(shù)字或下劃線,也就是 A~Z,a~z,0~9,_ 中任意一個(gè)

/s

包括空格、制表符、換頁(yè)符等空白字符的其中任意一個(gè)

.

小數(shù)點(diǎn)可以匹配除了換行符(/n)以外的任意一個(gè)字符

舉例1:表達(dá)式 "/d/d",在匹配 "abc123" 時(shí),匹配的結(jié)果是:成功;匹配到的內(nèi)容是:"12";匹配到的位置是:開(kāi)始于3,結(jié)束于5。舉例2:表達(dá)式 "a./d",在匹配 "aaa100" 時(shí),匹配的結(jié)果是:成功;匹配到的內(nèi)容是:"aa1";匹配到的位置是:開(kāi)始于1,結(jié)束于4。


1.4 自定義能夠匹配 '多種字符' 的表達(dá)式

使用方括號(hào) [ ] 包含一系列字符,能夠匹配其中任意一個(gè)字符。用 [^ ] 包含一系列字符,則能夠匹配其中字符之外的任意一個(gè)字符。同樣的道理,雖然可以匹配其中任意一個(gè),但是只能是一個(gè),不是多個(gè)。

表達(dá)式

可匹配

[ab5@]

匹配 "a" 或 "b" 或 "5" 或 "@"

[^abc]

匹配 "a","b","c" 之外的任意一個(gè)字符

[f-k]

匹配 "f"~"k" 之間的任意一個(gè)字母

[^A-F0-3]

匹配 "A"~"F","0"~"3" 之外的任意一個(gè)字符

舉例1:表達(dá)式 "[bcd][bcd]" 匹配 "abc123" 時(shí),匹配的結(jié)果是:成功;匹配到的內(nèi)容是:"bc";匹配到的位置是:開(kāi)始于1,結(jié)束于3。舉例2:表達(dá)式 "[^abc]" 匹配 "abc123" 時(shí),匹配的結(jié)果是:成功;匹配到的內(nèi)容是:"1";匹配到的位置是:開(kāi)始于3,結(jié)束于4。


1.5 修飾匹配次數(shù)的特殊符號(hào)

前面章節(jié)中講到的表達(dá)式,無(wú)論是只能匹配一種字符的表達(dá)式,還是可以匹配多種字符其中任意一個(gè)的表達(dá)式,都只能匹配一次。如果使用表達(dá)式再加上修飾匹配次數(shù)的特殊符號(hào),那么不用重復(fù)書(shū)寫(xiě)表達(dá)式就可以重復(fù)匹配。 使用方法是:"次數(shù)修飾"放在"被修飾的表達(dá)式"后邊。比如:"[bcd][bcd]" 可以寫(xiě)成 "[bcd]{2}"。

表達(dá)式

作用

{n}

表達(dá)式重復(fù)n次,比如:"/w{2}" 相當(dāng)于 "/w/w";"a{5}" 相當(dāng)于 "aaaaa"

{m,n}

表達(dá)式至少重復(fù)m次,最多重復(fù)n次,比如:"ba{1,3}"可以匹配 "ba"或"baa"或"baaa"

{m,}

表達(dá)式至少重復(fù)m次,比如:"/w/d{2,}"可以匹配 "a12","_456","M12344"...

?

匹配表達(dá)式0次或者1次,相當(dāng)于 {0,1},比如:"a[cd]?"可以匹配 "a","ac","ad"

+

表達(dá)式至少出現(xiàn)1次,相當(dāng)于 {1,},比如:"a+b"可以匹配 "ab","aab","aaab"...

*

表達(dá)式不出現(xiàn)或出現(xiàn)任意次,相當(dāng)于 {0,},比如:"/^*b"可以匹配 "b","^^^b"...

舉例1:表達(dá)式 "/d+/.?/d*" 在匹配 "It costs $12.5" 時(shí),匹配的結(jié)果是:成功;匹配到的內(nèi)容是:"12.5";匹配到的位置是:開(kāi)始于10,結(jié)束于14。舉例2:表達(dá)式 "go{2,8}gle" 在匹配 "Ads by goooooogle" 時(shí),匹配的結(jié)果是:成功;匹配到的內(nèi)容是:"goooooogle";匹配到的位置是:開(kāi)始于7,結(jié)束于17。


1.6 其他一些代表抽象意義的特殊符號(hào)

一些符號(hào)在表達(dá)式中代表抽象的特殊意義:

表達(dá)式

作用

^

與字符串開(kāi)始的地方匹配,不匹配任何字符

$

與字符串結(jié)束的地方匹配,不匹配任何字符

/b

匹配一個(gè)單詞邊界,也就是單詞和空格之間的位置,不匹配任何字符

進(jìn)一步的文字說(shuō)明仍然比較抽象,因此,舉例幫助大家理解。舉例1:表達(dá)式 "^aaa" 在匹配 "xxx aaa xxx" 時(shí),匹配結(jié)果是:失敗。因?yàn)?"^" 要求與字符串開(kāi)始的地方匹配,因此,只有當(dāng) "aaa" 位于字符串的開(kāi)頭的時(shí)候,"^aaa" 才能匹配,比如:"aaa xxx xxx"。舉例2:表達(dá)式 "aaa$" 在匹配 "xxx aaa xxx" 時(shí),匹配結(jié)果是:失敗。因?yàn)?"$" 要求與字符串結(jié)束的地方匹配,因此,只有當(dāng) "aaa" 位于字符串的結(jié)尾的時(shí)候,"aaa$" 才能匹配,比如:"xxx xxx aaa"。舉例3:表達(dá)式 "./b." 在匹配 "@@@abc" 時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是:"@a";匹配到的位置是:開(kāi)始于2,結(jié)束于4。 進(jìn)一步說(shuō)明:"/b" 與 "^" 和 "$" 類似,本身不匹配任何字符,但是它要求它在匹配結(jié)果中所處位置的左右兩邊,其中一邊是 "/w" 范圍,另一邊是 非"/w" 的范圍。舉例4:表達(dá)式 "/bend/b" 在匹配 "weekend,endfor,end" 時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是:"end";匹配到的位置是:開(kāi)始于15,結(jié)束于18。

一些符號(hào)可以影響表達(dá)式內(nèi)部的子表達(dá)式之間的關(guān)系:

表達(dá)式

作用

|

左右兩邊表達(dá)式之間 "或" 關(guān)系,匹配左邊或者右邊

( )

(1). 在被修飾匹配次數(shù)的時(shí)候,括號(hào)中的表達(dá)式可以作為整體被修飾(2). 取匹配結(jié)果的時(shí)候,括號(hào)中的表達(dá)式匹配到的內(nèi)容可以被單獨(dú)得到

舉例5:表達(dá)式 "Tom|Jack" 在匹配字符串 "I'm Tom, he is Jack" 時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是:"Tom";匹配到的位置是:開(kāi)始于4,結(jié)束于7。匹配下一個(gè)時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是:"Jack";匹配到的位置時(shí):開(kāi)始于15,結(jié)束于19。舉例6:表達(dá)式 "(go/s*)+" 在匹配 "Let's go go go!" 時(shí),匹配結(jié)果是:成功;匹配到內(nèi)容是:"go go go";匹配到的位置是:開(kāi)始于6,結(jié)束于14。舉例7:表達(dá)式 "¥(/d+/.?/d*)" 在匹配 "$10.9,¥20.5" 時(shí),匹配的結(jié)果是:成功;匹配到的內(nèi)容是:"¥20.5";匹配到的位置是:開(kāi)始于6,結(jié)束于10。單獨(dú)獲取括號(hào)范圍匹配到的內(nèi)容是:"20.5"。


2. 正則表達(dá)式中的一些高級(jí)規(guī)則

2.1 匹配次數(shù)中的貪婪與非貪婪

在使用修飾匹配次數(shù)的特殊符號(hào)時(shí),有幾種表示方法可以使同一個(gè)表達(dá)式能夠匹配不同的次數(shù),比如:"{m,n}", "{m,}", "?", "*", "+",具體匹配的次數(shù)隨被匹配的字符串而定。這種重復(fù)匹配不定次數(shù)的表達(dá)式在匹配過(guò)程中,總是盡可能多的匹配。比如,針對(duì)文本 "dxxxdxxxd",舉例如下:

表達(dá)式

匹配結(jié)果

(d)(/w+)

"/w+" 將匹配第一個(gè) "d" 之后的所有字符 "xxxdxxxd"

(d)(/w+)(d)

"/w+" 將匹配第一個(gè) "d" 和最后一個(gè) "d" 之間的所有字符 "xxxdxxx"。雖然 "/w+" 也能夠匹配上最后一個(gè) "d",但是為了使整個(gè)表達(dá)式匹配成功,"/w+" 可以 "讓出" 它本來(lái)能夠匹配的最后一個(gè) "d"

由此可見(jiàn),"/w+" 在匹配的時(shí)候,總是盡可能多的匹配符合它規(guī)則的字符。雖然第二個(gè)舉例中,它沒(méi)有匹配最后一個(gè) "d",但那也是為了讓整個(gè)表達(dá)式能夠匹配成功。同理,帶 "*" 和 "{m,n}" 的表達(dá)式都是盡可能地多匹配,帶 "?" 的表達(dá)式在可匹配可不匹配的時(shí)候,也是盡可能的 "要匹配"。這 種匹配原則就叫作 "貪婪" 模式 。

非貪婪模式: 在修飾匹配次數(shù)的特殊符號(hào)后再加上一個(gè) "?" 號(hào),則可以使匹配次數(shù)不定的表達(dá)式盡可能少的匹配,使可匹配可不匹配的表達(dá)式,盡可能的 "不匹配"。這種匹配原則叫作 "非貪婪" 模式,也叫作 "勉強(qiáng)" 模式。如果少匹配就會(huì)導(dǎo)致整個(gè)表達(dá)式匹配失敗的時(shí)候,與貪婪模式類似,非貪婪模式會(huì)最小限度的再匹配一些,以使整個(gè)表達(dá)式匹配成功。舉例如下,針對(duì)文本 "dxxxdxxxd" 舉例:

表達(dá)式

匹配結(jié)果

(d)(/w+?)

"/w+?" 將盡可能少的匹配第一個(gè) "d" 之后的字符,結(jié)果是:"/w+?" 只匹配了一個(gè) "x"

(d)(/w+?)(d)

為了讓整個(gè)表達(dá)式匹配成功,"/w+?" 不得不匹配 "xxx" 才可以讓后邊的 "d" 匹配,從而使整個(gè)表達(dá)式匹配成功。因此,結(jié)果是:"/w+?" 匹配 "xxx"

更多的情況,舉例如下:舉例1:表達(dá)式 "<td>(.*)</td>" 與字符串 "<td><p>aa</p></td> <td><p>bb</p></td>" 匹配時(shí),匹配的結(jié)果是:成功;匹配到的內(nèi)容是 "<td><p>aa</p></td> <td><p>bb</p></td>" 整個(gè)字符串, 表達(dá)式中的 "</td>" 將與字符串中最后一個(gè) "</td>" 匹配。舉例2:相比之下,表達(dá)式 "<td>(.*?)</td>" 匹配舉例1中同樣的字符串時(shí),將只得到 "<td><p>aa</p></td>", 再次匹配下一個(gè)時(shí),可以得到第二個(gè) "<td><p>bb</p></td>"。


2.2 反向引用 /1, /2...

表達(dá)式在匹配時(shí),表達(dá)式引擎會(huì)將小括號(hào) "( )" 包含的表達(dá)式所匹配到的字符串記錄下來(lái)。在獲取匹配結(jié)果的時(shí)候,小括號(hào)包含的表達(dá)式所匹配到的字符串可以單獨(dú)獲取。這一點(diǎn),在前面的舉例中,已經(jīng)多次展示了。在實(shí)際應(yīng)用場(chǎng)合中,當(dāng)用某種邊界來(lái)查找,而所要獲取的內(nèi)容又不包含邊界時(shí),必須使用小括號(hào)來(lái)指定所要的范圍。比如前面的 "<td>(.*?)</td>"。 其實(shí),"小括號(hào)包含的表達(dá)式所匹配到的字符串" 不僅是在匹配結(jié)束后才可以使用,在匹配過(guò)程中也可以使用。表達(dá)式后邊的部分,可以引用前面 "括號(hào)內(nèi)的子匹配已經(jīng)匹配到的字符串"。引用方法是 "/" 加上一個(gè)數(shù)字。"/1" 引用第1對(duì)括號(hào)內(nèi)匹配到的字符串,"/2" 引用第2對(duì)括號(hào)內(nèi)匹配到的字符串……以此類推,如果一對(duì)括號(hào)內(nèi)包含另一對(duì)括號(hào),則外層的括號(hào)先排序號(hào)。換句話說(shuō),哪一對(duì)的左括號(hào) "(" 在前,那這一對(duì)就先排序號(hào)。

舉例如下:舉例1:表達(dá)式 "('|")(.*?)(/1)" 在匹配 " 'Hello', "World" " 時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是:" 'Hello' "。再次匹配下一個(gè)時(shí),可以匹配到 " "World" "。舉例2:表達(dá)式 "(/w)/1{4,}" 在匹配 "aa bbbb abcdefg ccccc 111121111 999999999" 時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是 "ccccc"。再次匹配下一個(gè)時(shí),將得到 999999999。這個(gè)表達(dá)式要求 "/w" 范圍的字符至少重復(fù)5次,注意與 "/w{5,}" 之間的區(qū)別。舉例3:表達(dá)式 "<(/w+)/s*(/w+(=('|").*?/4)?/s*)*>.*?<//1>" 在匹配 "<td id='td1' ></td>" 時(shí),匹配結(jié)果是成功。如果 "<td>" 與 "</td>" 不配對(duì),則會(huì)匹配失敗;如果改成其他配對(duì),也可以匹配成功。


2.3 預(yù)搜索,不匹配;反向預(yù)搜索,不匹配

前面的章節(jié)中,我講到了幾個(gè)代表抽象意義的特殊符號(hào):"^","$","/b"。它們都有一個(gè)共同點(diǎn),那就是:它們本身不匹配任何字符,只是對(duì) "字符串的兩頭" 或者 "字符之間的縫隙" 附加了一個(gè)條件。理解到這個(gè)概念以后,本節(jié)將繼續(xù)介紹另外一種對(duì) "兩頭" 或者 "縫隙" 附加條件的,更加靈活的表示方法。

正向預(yù)搜索:"(?=xxxxx)","(?!xxxxx)" 格式:"(?=xxxxx)",在被匹配的字符串中,它對(duì)所處的 "縫隙" 或者 "兩頭" 附加的條件是:所在縫隙的右側(cè),必須能夠匹配上 xxxxx 這部分的表達(dá)式。因?yàn)樗皇窃诖俗鳛檫@個(gè)縫隙上附加的條件,所以它并不影響后邊的表達(dá)式去真正匹配這個(gè)縫隙之后的字符。這就類似 "/b",本身不匹配任何字符。"/b" 只是將所在縫隙之前、之后的字符取來(lái)進(jìn)行了一下判斷,不會(huì)影響后邊的表達(dá)式來(lái)真正的匹配。舉例1:表達(dá)式 "Windows(?=NT|XP)" 在匹配 "Windows 98, Windows NT, Windows 2000" 時(shí),將只匹配 "Windows NT" 中的 "Windows ",其他的 "Windows " 字樣則不被匹配。舉例2:表達(dá)式 "(/w)((?=/1/1/1)(/1))+" 在匹配字符串 "aaa ffffff 999999999" 時(shí),將可以匹配6個(gè)"f"的前4個(gè),可以匹配9個(gè)"9"的前7個(gè)。這個(gè)表達(dá)式可以讀解成:重復(fù)4次以上的字母數(shù)字,則匹配其剩下最后2位之前的部分。當(dāng)然,這個(gè)表達(dá)式可以不這樣寫(xiě),在此的目的是作為演示之用。

格式:"(?!xxxxx)",所在縫隙的右側(cè),必須不能匹配 xxxxx 這部分表達(dá)式。舉例3:表達(dá)式 "((?!/bstop/b).)+" 在匹配 "fdjka ljfdl stop fjdsla fdj" 時(shí),將從頭一直匹配到 "stop" 之前的位置,如果字符串中沒(méi)有 "stop",則匹配整個(gè)字符串。舉例4:表達(dá)式 "do(?!/w)" 在匹配字符串 "done, do, dog" 時(shí),只能匹配 "do"。在本條舉例中,"do" 后邊使用 "(?!/w)" 和使用 "/b" 效果是一樣的。

反向預(yù)搜索:"(?<=xxxxx)","(?<!xxxxx)" 這兩種格式的概念和正向預(yù)搜索是類似的,反向預(yù)搜索要求的條件是:所在縫隙的 "左側(cè)",兩種格式分別要求必須能夠匹配和必須不能夠匹配指定表達(dá)式,而不是去判斷右側(cè)。與 "正向預(yù)搜索" 一樣的是:它們都是對(duì)所在縫隙的一種附加條件,本身都不匹配任何字符。 舉例5:表達(dá)式 "(?<=/d{4})/d+(?=/d{4})" 在匹配 "1234567890123456" 時(shí),將匹配除了前4個(gè)數(shù)字和后4個(gè)數(shù)字之外的中間8個(gè)數(shù)字。由于 JScript.RegExp 不支持反向預(yù)搜索,因此,本條舉例不能夠進(jìn)行演示。很多其他的引擎可以支持反向預(yù)搜索,比如:Java1.4 以上的 java.util.regex 包,.NET 中System.Text.RegularExpressions 命名空間,以及本站推薦的最簡(jiǎn)單易用的 DEELX 正則引擎。


3. 其他通用規(guī)則

還有一些在各個(gè)正則表達(dá)式引擎之間比較通用的規(guī)則,在前面的講解過(guò)程中沒(méi)有提到。

3.1 表達(dá)式中,可以使用 "/xXX" 和 "/uXXXX" 表示一個(gè)字符("X" 表示一個(gè)十六進(jìn)制數(shù))

形式

字符范圍

/xXX

編號(hào)在 0 ~ 255 范圍的字符,比如:空格可以使用 "/x20" 表示

/uXXXX

任何字符可以使用 "/u" 再加上其編號(hào)的4位十六進(jìn)制數(shù)表示,比如:"/中"

3.2 在表達(dá)式 "/s","/d","/w","/b" 表示特殊意義的同時(shí),對(duì)應(yīng)的大寫(xiě)字母表示相反的意義

表達(dá)式

可匹配

/S

匹配所有非空白字符("/s" 可匹配各個(gè)空白字符)

/D

匹配所有的非數(shù)字字符

/W

匹配所有的字母、數(shù)字、下劃線以外的字符

/B

匹配非單詞邊界,即左右兩邊都是 "/w" 范圍或者左右兩邊都不是 "/w" 范圍時(shí)的字符縫隙

3.3 在表達(dá)式中有特殊意義,需要添加 "/" 才能匹配該字符本身的字符匯總

字符

說(shuō)明

^

匹配輸入字符串的開(kāi)始位置。要匹配 "^" 字符本身,請(qǐng)使用 "/^"

$

匹配輸入字符串的結(jié)尾位置。要匹配 "$" 字符本身,請(qǐng)使用 "/$"

( )

標(biāo)記一個(gè)子表達(dá)式的開(kāi)始和結(jié)束位置。要匹配小括號(hào),請(qǐng)使用 "/(" 和 "/)"

[ ]

用來(lái)自定義能夠匹配 '多種字符' 的表達(dá)式。要匹配中括號(hào),請(qǐng)使用 "/[" 和 "/]"

{ }

修飾匹配次數(shù)的符號(hào)。要匹配大括號(hào),請(qǐng)使用 "/{" 和 "/}"

.

匹配除了換行符(/n)以外的任意一個(gè)字符。要匹配小數(shù)點(diǎn)本身,請(qǐng)使用 "/."

?

修飾匹配次數(shù)為 0 次或 1 次。要匹配 "?" 字符本身,請(qǐng)使用 "/?"

+

修飾匹配次數(shù)為至少 1 次。要匹配 "+" 字符本身,請(qǐng)使用 "/+"

*

修飾匹配次數(shù)為 0 次或任意次。要匹配 "*" 字符本身,請(qǐng)使用 "/*"

|

左右兩邊表達(dá)式之間 "或" 關(guān)系。匹配 "|" 本身,請(qǐng)使用 "/|"

3.4 括號(hào) "( )" 內(nèi)的子表達(dá)式,如果希望匹配結(jié)果不進(jìn)行記錄供以后使用,可以使用 "(?:xxxxx)" 格式

舉例1:表達(dá)式 "(?:(/w)/1)+" 匹配 "a bbccdd efg" 時(shí),結(jié)果是 "bbccdd"。括號(hào) "(?:)" 范圍的匹配結(jié)果不進(jìn)行記錄,因此 "(/w)" 使用 "/1" 來(lái)引用。

3.5 常用的表達(dá)式屬性設(shè)置簡(jiǎn)介:Ignorecase,Singleline,Multiline,Global

表達(dá)式屬性

說(shuō)明

Ignorecase

默認(rèn)情況下,表達(dá)式中的字母是要區(qū)分大小寫(xiě)的。配置為 Ignorecase 可使匹配時(shí)不區(qū)分大小寫(xiě)。有的表達(dá)式引擎,把 "大小寫(xiě)" 概念延伸至 UNICODE 范圍的大小寫(xiě)。

Singleline

默認(rèn)情況下,小數(shù)點(diǎn) "." 匹配除了換行符(/n)以外的字符。配置為 Singleline 可使小數(shù)點(diǎn)可匹配包括換行符在內(nèi)的所有字符。

Multiline

默認(rèn)情況下,表達(dá)式 "^" 和 "$" 只匹配字符串的開(kāi)始 ① 和結(jié)尾 ④ 位置。如:①xxxxxxxxx②/n③xxxxxxxxx④配置為 Multiline 可以使 "^" 匹配 ① 外,還可以匹配換行符之后,下一行開(kāi)始前 ③ 的位置,使 "$" 匹配 ④ 外,還可以匹配換行符之前,一行結(jié)束 ② 的位置。

Global

主要在將表達(dá)式用來(lái)替換時(shí)起作用,配置為 Global 表示替換所有的匹配。


4. 其他提示

4.1 如果想要了解高級(jí)的正則引擎還支持那些復(fù)雜的正則語(yǔ)法,可參見(jiàn)本站 DEELX 正則引擎的說(shuō)明文檔。

4.2 如果要要求表達(dá)式所匹配的內(nèi)容是整個(gè)字符串,而不是從字符串中找一部分,那么可以在表達(dá)式的首尾使用 "^" 和 "$",比如:"^/d+$" 要求整個(gè)字符串只有數(shù)字。

4.3 如果要求匹配的內(nèi)容是一個(gè)完整的單詞,而不會(huì)是單詞的一部分,那么在表達(dá)式首尾使用 "/b",比如:使用 "/b(if|while|else|void|int……)/b" 來(lái)匹配程序中的關(guān)鍵字。

4.4 表達(dá)式不要匹配空字符串。否則會(huì)一直得到匹配成功,而結(jié)果什么都沒(méi)有匹配到。比如:準(zhǔn)備寫(xiě)一個(gè)匹配 "123"、"123."、"123.5"、".5" 這幾種形式的表達(dá)式時(shí),整數(shù)、小數(shù)點(diǎn)、小數(shù)數(shù)字都可以省略,但是不要將表達(dá)式寫(xiě)成:"/d*/.?/d*",因?yàn)槿绻裁炊紱](méi)有,這個(gè)表達(dá)式也可以匹配成功。更好的寫(xiě)法是:"/d+/.?/d*|/./d+"。

4.5 能匹配空字符串的子匹配不要循環(huán)無(wú)限次。如果括號(hào)內(nèi)的子表達(dá)式中的每一部分都可以匹配 0 次,而這個(gè)括號(hào)整體又可以匹配無(wú)限次,那么情況可能比上一條所說(shuō)的更嚴(yán)重,匹配過(guò)程中可能死循環(huán)。雖然現(xiàn)在有些正則表達(dá)式引擎已經(jīng)通過(guò)辦法避免了這種情況出現(xiàn)死循環(huán)了,比如 .NET 的正則表達(dá)式,但是我們?nèi)匀粦?yīng)該盡量避免出現(xiàn)這種情況。如果我們?cè)趯?xiě)表達(dá)式時(shí)遇到了死循環(huán),也可以從這一點(diǎn)入手,查找一下是否是本條所說(shuō)的原因。

4.6 合理選擇貪婪模式與非貪婪模式,參見(jiàn)話題討論。

4.7 或 "|" 的左右兩邊,對(duì)某個(gè)字符最好只有一邊可以匹配,這樣,不會(huì)因?yàn)?"|" 兩邊的表達(dá)式因?yàn)榻粨Q位置而有所不同。

------------------------------------------------------------------------------------------下一篇

1,定義正則表達(dá)式

1)定義正則表達(dá)式有兩種形式,一種是普通方式,一種是構(gòu)造函數(shù)方式。2)普通方式:var reg=/表達(dá)式/附加參數(shù)表達(dá)式:一個(gè)字符串,代表了某種規(guī)則,其中可以使用某些特殊字符,來(lái)代表特殊的規(guī)則,后面會(huì)詳細(xì)說(shuō)明。附加參數(shù):用來(lái)擴(kuò)展表達(dá)式的含義,目前主要有三個(gè)參數(shù):g:代表可以進(jìn)行全局匹配。i:代表不區(qū)分大小寫(xiě)匹配。m:代表可以進(jìn)行多行匹配。上面三個(gè)參數(shù),可以任意組合,代表復(fù)合含義,當(dāng)然也可以不加參數(shù)。例子:var reg=/a*b/;var reg=/abc+f/g;3)構(gòu)造函數(shù)方式:var reg=new RegExp(“表達(dá)式”,”附加參數(shù)”);其中“表達(dá)式”與“附加參數(shù)”的含義與上面那種定義方式中的含義相同。例子:var reg=new RegExp(“a*b”);var reg=new RegExp(“abc+f”,”g”);4)普通方式與構(gòu)造函數(shù)方式的區(qū)別普通方式中的表達(dá)式必須是一個(gè)常量字符串,而構(gòu)造函數(shù)中的表達(dá)式可以是常量字符串,也可以是一個(gè)js變量,例如根據(jù)用戶的輸入來(lái)作為表達(dá)式參數(shù)等等:var reg=new RegExp(document.forms[0].exprfiled.value,”g”);

2,表達(dá)式模式

1)表達(dá)式模式,是指表達(dá)式的表達(dá)方式與樣式, 即 var reg=/表達(dá)式/附加參數(shù) 中的“表達(dá)式”怎樣去描述?2)從規(guī)范上講,表達(dá)式模式分為簡(jiǎn)單模式和復(fù)合模式。3)簡(jiǎn)單模式:是指通過(guò)普通字符的組合來(lái)表達(dá)的模式,例如var reg=/abc0d/;可見(jiàn)簡(jiǎn)單模式只能表示具體的匹配。4)復(fù)合模式:是指含有通配符來(lái)表達(dá)的模式,例如:var reg=/a+b?/w/;其中的+、?和/w都屬于通配符,代表著特殊的含義。因此復(fù)合模式可以表達(dá)更為抽象化的邏輯。下面我們著重說(shuō)一下復(fù)合模式中各個(gè)通配符的含義及其使用。5)復(fù)合模式中特殊字符的講解:

1>/:在許多編程語(yǔ)言里面被用作轉(zhuǎn)義符,一般來(lái)說(shuō)
/符號(hào)后面如果跟的是普通字符c,那么/c就代表特殊的含義,例如n本來(lái)代表字符n,但/n就代表?yè)Q行。
/符號(hào)后面如果跟的是特殊字符c,那么/c就代表普通字符c,例如/一般用作轉(zhuǎn)義符,但//則調(diào)表普通字符/。JavaScript的正則表達(dá)式中/的用法與上面相同,只是不同的編程語(yǔ)言,特殊字符表可能不太一樣罷了。

2>^:匹配輸入字符串的起始端,如果是多行匹配,即表達(dá)式的附加參數(shù)中含有m,則也在一個(gè)換行符后匹配。
例子:/^B/匹配 “Bab Bc ”中的第一個(gè)B例子2:/^B/gm匹配 “Badd B cdaf B dsfB” 中的第一行第一個(gè)B,第三行中的第一個(gè)B3>$:匹配輸入字符創(chuàng)的尾端,如果是多行匹配,即表達(dá)式的附加參數(shù)中含有m,則也在一個(gè)換行符前匹配。與^的用法相反。例子:/t$/匹配“bat”中的t,但是不匹配“hate”中的t例子2:/t$/匹配“tag atbat”中第一行的最后一個(gè)t和第二行的t。

4>*:匹配前一個(gè)字符0次或多次。
例子:/ab*/匹配“dddabbbbc”中的“abbbb”,也匹配“ddda”中的“a”

5>+:匹配前一個(gè)字符1次或多次。例子:/ab+/匹配“dddabbbbc”中的“abbbb”,但不匹配“ddda”
與后面的{1,}(原型:{n,})的用法類似

6>?:?的用法比較特殊,一般來(lái)說(shuō)它用來(lái)對(duì)前一個(gè)字符做0次或1次匹配,但是它有另外兩種特殊的用法:如果緊跟在*、+、?和{ }之后,則表示原始匹配的最小次數(shù)匹配,例如:/ba*/本來(lái)匹配“bbbaaaa”中的“baaaa”,但是/ba*?/則匹配“bbbaaaa”中的“b”(因?yàn)?表示0次或多次匹配,而加?應(yīng)該表示最少次數(shù)匹配,即0次匹配)。同理:/ba+?/則匹配“baaaa”中的“ba”。作為語(yǔ)法結(jié)構(gòu)符號(hào),使用于前置斷言中,即后面要說(shuō)到的x(?=y)和x(?!=y)

7>.:小數(shù)點(diǎn)中的“.”號(hào),匹配任何一個(gè)單獨(dú)的字符,但是換行符除外。標(biāo)準(zhǔn)中總共有哪些字符?請(qǐng)參考:字符集例如:/a.b/匹配“acbaa”中的“acb”,但是不匹配“abbb”。

8>(x):表示匹配x(并非特指字符x或者特指一個(gè)字符,x表示一個(gè)字符串),而且匹配會(huì)被記住,在語(yǔ)法中這種()被稱為“capturing parentheses ”,即捕捉用的小括號(hào)。匹配會(huì)被記住,是因?yàn)樵诒磉_(dá)式提供的函數(shù)中,有些函數(shù)返回一個(gè)數(shù)組,該數(shù)組會(huì)保存所匹配的所有字符串,例如exec()函數(shù)。另外還要注意()中的x被記住的前提是匹配x。例子1:var regx=/a(b)c/;var rs=regx.exec(“abcddd”);從上面可以看出,/a(b)c/匹配“abcddd”中的“abc”,因?yàn)?)的原因,b也會(huì)記錄下來(lái),因此rs返回的數(shù)字內(nèi)容為:{abc,b}例子2:
var regx=/a(b)c/;
var rs=regx.exec(“acbcddd”);rs返回null,因?yàn)?a(b)c/不匹配“acbcddd”,所以()中的b不會(huì)被記錄下來(lái)(盡管字符串中含有b)9>(?:x):匹配x,但不會(huì)記住x,這種格式中的()被稱為“non-capturing parentheses ”,即非捕捉用的小括號(hào)。例子:var regx=/a(?:b)c/;var rs=regx.exec(“abcddd”);從上面可以看出,/a(?:b)c/匹配“abcddd”中的“abc”,因?yàn)??:)的原因,b不會(huì)記錄下來(lái),因此rs返回的數(shù)字內(nèi)容為:{abc}

10>X(?=y):匹配x,僅當(dāng)后面緊跟著y時(shí)。如果符合匹配,則只有x會(huì)被記住,y不會(huì)被記住。例子:var regx=/user(?=name)/;var rs=regx.exec(“The username is Mary”);
結(jié)果:匹配成功,而且rs的值為{user}

11>X(?!y):匹配x,僅當(dāng)后面不緊跟著y時(shí)。如果符合匹配,則只有x會(huì)被記住,y不會(huì)被記住。例子:var regx=/user(?!name)/;var rs=regx.exec(“The user name is Mary”);
結(jié)果:匹配成功,而且rs的值為{user}
例子2:
var regx=//d+(?!/.)/;var rs=regx.exec(“54.235”);結(jié)果:匹配成果,rs的值為{5},不匹配54是因?yàn)?4后面跟著“.”號(hào),當(dāng)然235也匹配,但是由于exec方法的行為,235不會(huì)被返回

12>x|y:匹配x或y。注意如果x和y都匹配上了,那么只記住x。
/>例子:var regx=/beijing|shanghai/;var rs=regx.exec(“I love beijing and shanghai”);結(jié)果:匹配成功,rs的值為{beijing},雖然shanghai也匹配,但不會(huì)被記住。

13>{n}:匹配前一個(gè)字符的n次出現(xiàn)。n必須是一個(gè)非負(fù)數(shù),當(dāng)然如果是一個(gè)負(fù)數(shù)或小數(shù)也不會(huì)報(bào)語(yǔ)法錯(cuò)誤。例子:var regx=/ab{2}c/;var rs=regx.exec(“abbcd”);
結(jié)果:匹配成功,rs的值為:{abbc}。

14>{n,}:匹配前一個(gè)字符的至少n次出現(xiàn)。例子:var regx=/ab{2,}c/;var rs=regx.exec(“abbcdabbbc”);結(jié)果:匹配成功,rs的值為:{abbc}。注意為什么abbbc也符合條件為什么沒(méi)有被記住,這與exec方法的行為有關(guān),后面會(huì)統(tǒng)一講解。

15>{n,m}:匹配前一個(gè)字符的至少n次最多m次的出現(xiàn)。只要n與m為數(shù)字,而且m>=n就不會(huì)報(bào)語(yǔ)法錯(cuò)誤。例子:var regx=/ab{2,5}c/;
var rs=regx.exec(“abbbcd”);結(jié)果:匹配成功,rs的值為:{abbbc}。例子2:var regx=/ab{2,2}c/;var rs=regx.exec(“abbcd”);結(jié)果:匹配成功,rs的值為:{abbc}。例子3:var regx=/ab(2,5)/;var rs=regx.exec(“abbbbbbbbbb”);
/>結(jié)果:匹配成功,rs的值為:{abbbbb},這說(shuō)明,如果前一個(gè)字符出現(xiàn)多于m次,則只匹配m次。另外:var regx=/ab(2,5)c/;var rs=regx.exec(“abbbbbbbbbbc”);結(jié)果:匹配失敗,rs的值為:null,為什么匹配失敗,因?yàn)閎多于5個(gè)則b(2,5)會(huì)匹配前5個(gè)b,,而表達(dá)式/ab(2,5)c/中b后面是c,但字符串中5個(gè)b之后還是b所以會(huì)報(bào)錯(cuò)。

16>[xyz]:xyz表示一個(gè)字符串,該模式表示匹配[]中的一個(gè)字符,形式上[xyz]等同于[x-z]。例子:var regx=/a[bc]d/;var rs=regx.exec(“abddgg”);結(jié)果:匹配成功,rs的值為:{abd}例子2:var regx=/a[bc]d/;var rs=regx.exec(“abcd”);
/>結(jié)果:匹配失敗,rs的值為:null,之所以失敗,是因?yàn)閇bc]表示匹配b或c中的一個(gè),但不會(huì)同時(shí)匹配。

17>[^xyz]:該模式表示匹配非[]中的一個(gè)字符,形式上[^xyz]等同于[^x-z]。
例子:var regx=/a[^bc]d/;var rs=regx.exec(“afddgg”);結(jié)果:匹配成功,rs的值為:{afd}例子2:var regx=/a[^bc]d/;var rs=regx.exec(“abd”);結(jié)果:匹配失敗,rs的值為:。

18>[/b]:匹配退格鍵。

19>/b:匹配一個(gè)詞的邊界符,例如空格和換行符等等,當(dāng)然匹配換行符時(shí),表達(dá)式應(yīng)該附加參數(shù)m。例子:var regx=//bc./;var rs=regx.exec(“Beijing is a beautiful city”);
/>結(jié)果:匹配成功,rs的值為:{ci},注意c前邊的空格不會(huì)匹配到結(jié)果中,即{ ci}是不正確的。

20>/B:代表一個(gè)非單詞邊界。例子:var regx=//Bi./;var rs=regx.exec(“Beijing is a beautiful city”);
/>結(jié)果:匹配成功,rs的值為:{ij},即匹配了Beijing中的ij。

21>/cX,匹配一個(gè)控制字符。例如, /cM 匹配一個(gè) Control-M 或回車符。 x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個(gè)原義的 ’c’ 字符。(實(shí)際的例子還需補(bǔ)充)

21>/d:匹配一個(gè)數(shù)字字符,等同于[0-9]。例子:var regx=/user/d/;var rs=regx.exec(“user1”);結(jié)果:匹配成功,rs的值為:{user1}

22>/D:匹配一個(gè)非數(shù)字字符,等同于[^0-9]。例子:var regx=/user/D/;var rs=regx.exec(“userA”);結(jié)果:匹配成功,rs的值為:{userA}

23>/f:匹配一個(gè)換頁(yè)符。

24>/n:匹配一個(gè)換行符。因?yàn)槭菗Q行符,所以在表達(dá)式中要加入m參數(shù)。例子:var regx=/a/nbc/m; var str=“a bc”; var rs=regx.exec(str); 結(jié)果:匹配成功,rs的值為:{ },如果表達(dá)式為/a/n/rbc/,則不會(huì)被匹配,因此在一般的編輯器中一個(gè)”Enter”鍵代表著“回車換行”,而非“換行回車”,至少在textarea域中是這樣的。25>/r:匹配一個(gè)回車符

26>/s:匹配一個(gè)空格符,等同于[ /f/n/r/t/v/u00A0/u2028/u2029].
/>例子:
var regx=//si/;var rs=regx.exec(“Beijing is a city”);結(jié)果:匹配成功,rs的值為:{ i}

27>/S:匹配一個(gè)非空格符,等同于[ ^/f/n/r/t/v/u00A0/u2028/u2029].例子:var regx=//Si/;var rs=regx.exec(“Beijing is a city”);結(jié)果:匹配成功,rs的值為:{ei}

28>/t:匹配一個(gè)tab例子:var regx=/a/tb/;var rs=regx.exec(“a bc”);
結(jié)果:匹配成功,rs的值為: {a bc}

29>/v:匹配一個(gè)豎向的tab

30>/w:匹配一個(gè)數(shù)字、_或字母表字符,即[A-Za-z0-9_ ]。例子:var regx=//w/;
var rs=regx.exec(“$25.23”);結(jié)果:匹配成功,rs的值為:{2}

31>/W:匹配一個(gè)非數(shù)字、_或字母表字符,即[^A-Za-z0-9_ ]。例子:var regx=//w/;var rs=regx.exec(“$25.23”);結(jié)果:匹配成功,rs的值為:{$}

32>/n:注意不是/n,這里n是一個(gè)正整數(shù),表示匹配第n個(gè)()中的字符。例子:var regx=/user([,-])group/1role/;var rs=regx.exec(“user-group-role”);
結(jié)果:匹配成功,rs的值為:{user-group-role,-},同樣對(duì)user,group,role的匹配也是成功的,但像user-group,role等就不對(duì)了。

33>/0:匹配一個(gè)NUL字符。

34>/xhh:匹配一個(gè)由兩位16進(jìn)制數(shù)字所表達(dá)的字符。

35>/uhhhh:匹配一個(gè)由四位16進(jìn)制數(shù)字所表達(dá)的字符。

3,表達(dá)式操作

1)表達(dá)式操作,在這里是指和表達(dá)式相關(guān)的方法,我們將介紹六個(gè)方法。2)表達(dá)式對(duì)象(RegExp)方法:

1>exec(str),返回str中與表達(dá)式相匹配的第一個(gè)字符串,而且以數(shù)組的形式表現(xiàn),當(dāng)然如果表達(dá)式中含有捕捉用的小括號(hào),則返回的數(shù)組中也可能含有()中的匹配字符串,例如:
var regx=//d+/;var rs=regx.exec(“3432ddf53”);返回的rs值為:{3432}var regx2=new RegExp(“ab(/d+)c”);var rs2=regx2.exec(“ab234c44”);返回的rs值為:{ab234c,234}另外,如果有多個(gè)合適的匹配,則第一次執(zhí)行exec返回一個(gè)第一個(gè)匹配,此時(shí)繼續(xù)執(zhí)行exec,則依次返回第二個(gè)第三個(gè)匹配。例如:var regx=/user/d/g;var rs=regx.exec(“ddduser1dsfuser2dd”);var rs1=regx.exec(“ddduser1dsfuser2dd”);則rs的值為{user1},rs的值為{rs2},當(dāng)然注意regx中的g參數(shù)是必須的,否則無(wú)論exec執(zhí)行多少次,都返回第一個(gè)匹配。后面還有相關(guān)內(nèi)容涉及到對(duì)此想象的解釋。

2>test(str),判斷字符串str是否匹配表達(dá)式,返回一個(gè)布爾值。例如:var regx=/user/d+/g;var flag=regx.test(“user12dd”);
flag的值為true。

3)String對(duì)象方法

1>match(expr),返回與expr相匹配的一個(gè)字符串?dāng)?shù)組,如果沒(méi)有加參數(shù)g,則返回第一個(gè)匹配,加入?yún)?shù)g則返回所有的匹配例子:var regx=/user/d/g;var str=“user13userddduser345”;var rs=str.match(regx);rs的值為:{user1,user3}

2>search(expr),返回字符串中與expr相匹配的第一個(gè)匹配的index值。例子:var regx=/user/d/g;var str=“user13userddduser345”;var rs=str.search(regx);
rs的值為:0

3>replace(expr,str),將字符串中匹配expr的部分替換為str。另外在replace方法中,str中可以含有一種變量符號(hào)$,格式為$n,代表匹配中被記住的第n的匹配字符串(注意小括號(hào)可以記憶匹配)。
/>例子:var regx=/user/d/g;
var str=“user13userddduser345”;var rs=str.replace(regx,”00”);
rs的值為:003userddd0045例子2:var regx=/u(se)r/d/g;var str=“user13userddduser345”;
var rs=str.replace(regx,”$1”);rs的值為:se3userdddse45對(duì)于replace(expr,str)方法還要特別注意一點(diǎn),如果expr是一個(gè)表達(dá)式對(duì)象則會(huì)進(jìn)行全局替換(此時(shí)表達(dá)式必須附加參數(shù)g,否則也只是替換第一個(gè)匹配),如果expr是一個(gè)字符串對(duì)象,則只會(huì)替換第一個(gè)匹配的部分,例如:var regx=“user”var str=“user13userddduser345”;var rs=str.replace(regx,”00”);rs的值為: 0013userddduser345

4>split(expr),將字符串以匹配expr的部分做分割,返回一個(gè)數(shù)組,而且表達(dá)式是否附加參數(shù)g都沒(méi)有關(guān)系,結(jié)果是一樣的。例子:var regx=/user/d/g;var str=“user13userddduser345”;var rs=str.split(regx);rs的值為:{3userddd,45}

4,表達(dá)式相關(guān)屬性

1)表達(dá)式相關(guān)屬性,是指和表達(dá)式相關(guān)的屬性,如下面的形式:var regx=/myexpr/;var rs=regx.exec(str);其中,和表達(dá)式自身regx相關(guān)的屬性有兩個(gè),和表達(dá)式匹配結(jié)果rs相關(guān)的屬性有三個(gè),下面將逐一介紹。2)和表達(dá)式自身相關(guān)的兩個(gè)屬性:

1>lastIndex,返回開(kāi)始下一個(gè)匹配的位置,注意必須是全局匹配(表達(dá)式中帶有g(shù)參數(shù))時(shí),lastIndex才會(huì)有不斷返回下一個(gè)匹配值,否則該值為總是返回第一個(gè)下一個(gè)匹配位置,例如:var regx=/user/d/;var rs=regx.exec(“sdsfuser1dfsfuser2”);var lastIndex1=regx.lastIndex;rs=regx.exec(“sdsfuser1dfsfuser2”);var lastIndex2=regx.lastIndex;rs=regx.exec(“sdsfuser1dfsfuser2”);var lastIndex3=regx.lastIndex;上面lastIndex1為9,第二個(gè)lastIndex2也為9,第三個(gè)也是9;如果regx=/user/d/g,則第一個(gè)為9,第二個(gè)為18,第三個(gè)為0。

2>source,返回表達(dá)式字符串自身。例如:var regx=/user/d/;var rs=regx.exec(“sdsfuser1dfsfuser2”);var source=regx.source;source的值為user/d3)和匹配結(jié)果相關(guān)的三個(gè)屬性:

1>index,返回當(dāng)前匹配的位置。例如:
var regx=/user/d/;var rs=regx.exec(“sdsfuser1dfsfuser2”);var index1=rs.index;rs=regx.exec(“sdsfuser1dfsfuser2”);var index2=rs.index;
/>rs=regx.exec(“sdsfuser1dfsfuser2”);var index3=rs.index;index1為4,index2為4,index3為4,如果表達(dá)式加入?yún)?shù)g,則index1為4,index2為13,index3會(huì)報(bào)錯(cuò)(index為空或不是對(duì)象)。

2>input,用于匹配的字符串。例如:var regx=/user/d/;var rs=regx.exec(“sdsfuser1dfsfuser2”);var input=rs.input;input的值為sdsfuser1dfsfuser2。

3>[0],返回匹配結(jié)果中的第一個(gè)匹配值,對(duì)于match而言可能返回一個(gè)多值的數(shù)字,則除了[0]外,還可以取[1]、[2]等等。例如:var regx=/user/d/;
/>var rs=regx.exec(“sdsfuser1dfsfuser2”);var value1=rs[0];
rs=regx.exec(“sdsfuser1dfsfuser2”);var value2=rs[0];value1的值為user1,value2的值為user2

5,實(shí)際應(yīng)用

1)實(shí)際應(yīng)用一描述:有一表單,其中有一個(gè)“用戶名”input域要求:漢字,而且不能少于2個(gè)漢字,不能多于4個(gè)漢字。實(shí)現(xiàn):<script>function checkForm(obj){ var username=obj.username.value; var regx=/^[/u4e00-/u9fa5]{2,4}$/g if(!regx.test(username)){ alert(“Invalid username!”); return false; } return true;}</script><form name=“myForm”onSubmit=“return checkForm(this)”> <input type=“text” name=“username”/> <input type=“submit” vlaue=“submit”/></form>2)實(shí)際應(yīng)用二描述:給定一個(gè)含有html標(biāo)記的字符串,要求將其中的html標(biāo)記去掉。實(shí)現(xiàn):<script>function toPlainText(htmlStr){ var regx=/<[^>]*>|<//[^>]*>/gm; var str=htmlStr.replace(regx,""); return str;}</script><form name=“myForm”> <textarea id=“htmlInput”></textarea> <input type=“button” value=“submit” onclick=“toPlainText(document.getElementById(‘htmlInput’).value”/></form>

三,小結(jié)

1,Javascript正則表達(dá)式,我想在一般的程序員之中,使用者應(yīng)該不是很多,因?yàn)槲覀兲幚淼捻?yè)面一般都不是很復(fù)雜,而復(fù)雜的邏輯一般我們都在后臺(tái)處理完成了。但是目前趨勢(shì)已經(jīng)出現(xiàn)了扭轉(zhuǎn),富客戶端已經(jīng)被越來(lái)越多的人接受,而Javascript就是其中的關(guān)鍵技術(shù),對(duì)于復(fù)雜的客戶端邏輯而言,正則表達(dá)式的作用也是很關(guān)鍵的,同時(shí)它也是Javascript高手必須要掌握的重要技術(shù)之一。

2,為了能夠便于大家對(duì)前面講述的內(nèi)容有一個(gè)更為綜合和深刻的認(rèn)識(shí),我將前面的一些關(guān)鍵點(diǎn)和容易犯糊涂的地方再系統(tǒng)總結(jié)一下,這部分很關(guān)鍵!總結(jié)1:附件參數(shù)g的用法表達(dá)式加上參數(shù)g之后,表明可以進(jìn)行全局匹配,注意這里“可以”的含義。我們?cè)敿?xì)敘述:
/>1)對(duì)于表達(dá)式對(duì)象的exec方法,不加入g,則只返回第一個(gè)匹配,無(wú)論執(zhí)行多少次均是如此,如果加入g,則第一次執(zhí)行也返回第一個(gè)匹配,再執(zhí)行返回第二個(gè)匹配,依次類推。例如var regx=/user/d/;var str=“user18dsdfuser2dsfsd”;var rs=regx.exec(str);//此時(shí)rs的值為{user1}var rs2=regx.exec(str);//此時(shí)rs的值依然為{user1}如果regx=/user/d/g;則rs的值為{user1},rs2的值為{user2}通過(guò)這個(gè)例子說(shuō)明:對(duì)于exec方法,表達(dá)式加入了g,并不是說(shuō)執(zhí)行exec方法就可以返回所有的匹配,而是說(shuō)加入了g之后,我可以通過(guò)某種方式得到所有的匹配,這里的“方式”對(duì)于exec而言,就是依次執(zhí)行這個(gè)方法即可。2)對(duì)于表達(dá)式對(duì)象的test方法,加入g于不加上g沒(méi)有什么區(qū)別。3)對(duì)于String對(duì)象的match方法,不加入g,也只是返回第一個(gè)匹配,一直執(zhí)行match方法也總是返回第一個(gè)匹配,加入g,則一次返回所有的匹配(注意這與表達(dá)式對(duì)象的exec方法不同,對(duì)于exec而言,表達(dá)式即使加上了g,也不會(huì)一次返回所有的匹配)。例如:var regx=/user/d/;var str=“user1sdfsffuser2dfsdf”;
/>var rs=str.match(regx);//此時(shí)rs的值為{user1}var rs2=str.match(regx);//此時(shí)rs的值依然為{user1}如果regx=/user/d/g,則rs的值為{user1,user2},rs2的值也為{user1,user2}4)對(duì)于String對(duì)象的replace方法,表達(dá)式不加入g,則只替換第一個(gè)匹配,如果加入g,則替換所有匹配。(開(kāi)頭的三道測(cè)試題能很好的說(shuō)明這一點(diǎn))5)對(duì)于String對(duì)象的split方法,加上g與不加g是一樣的,即:var sep=/user/d/;var array=“user1dfsfuser2dfsf”.split(sep);則array的值為{dfsf, dfsf}此時(shí)sep=/user/d/g,返回值是一樣的。6)對(duì)于String對(duì)象的search方法,加不加g也是一樣的。總結(jié)2:附加參數(shù)m的用法附加參數(shù)m,表明可以進(jìn)行多行匹配,但是這個(gè)只有當(dāng)使用^和$模式時(shí)才會(huì)起作用,在其他的模式中,加不加入m都可以進(jìn)行多行匹配(其實(shí)說(shuō)多行的字符串也是一個(gè)普通字符串),我們舉例說(shuō)明這一點(diǎn)1)使用^的例子var regx=/^b./g;var str=“bd76 dfsdf sdfsdfs dffs
b76dsf sdfsdf”;var rs=str.match(regx);此時(shí)加入g和不加入g,都只返回第一個(gè)匹配{bd},如果regx=/^b./gm,則返回所有的匹配{bd,b7},注意如果regx=/^b./m,則也只返回第一個(gè)匹配。所以,加入m表明可以進(jìn)行多行匹配,加入g表明可以進(jìn)行全局匹配,綜合到一起就是可以進(jìn)行多行全局匹配
/>2)使用其他模式的例子,例如var regx=/user/d/;var str=“sdfsfsdfsdf sdfsuser3 dffs b76dsf user6”;var rs=str.match(regx);
此時(shí)不加參數(shù)g,則返回{user3},加入?yún)?shù)g返回{user3,user6},加不加入m對(duì)此沒(méi)有影響。3)因此對(duì)于m我們要清楚它的使用,記住它只對(duì)^和$模式起作用,在這兩種模式中,m的作用為:如果不加入m,則只能在第一行進(jìn)行匹配,如果加入m則可以在所有的行進(jìn)行匹配。我們?cè)倏匆粋€(gè)^的例子var regx=/^b./;var str=“ret76 dfsdf bjfsdfs dffs b76dsf sdfsdf”;var rs=str.match(regx);此時(shí)rs的值為null,如果加入g,rs的值仍然為null,如果加入m,則rs的值為{bj}(也就是說(shuō),在第一行沒(méi)有找到匹配,因?yàn)橛袇?shù)m,所以可以繼續(xù)去下面的行去找是否有匹配),如果m和g都加上,則返回{bj,b7}(只加m不加g說(shuō)明,可以去多行進(jìn)行匹配,但是找到一個(gè)匹配后就返回,加入g表明將多行中所有的匹配返回,當(dāng)然對(duì)于match方法是如此,對(duì)于exec呢,則需要執(zhí)行多次才能依次返回)總結(jié)3:在HTML的textarea輸入域中,按一個(gè)Enter鍵,對(duì)應(yīng)的控制字符為“/r/n”,即“回車換行”,而不是“/n/r”,即“換行回車”,我們看一個(gè)前面我們舉過(guò)的例子:var regx=/a/r/nbc/;var str=“a bc”;var rs=regx.exec(str);結(jié)果:匹配成功,rs的值為:{ },如果表達(dá)式為/a/n/rbc/,則不會(huì)被匹配,因此在一般的編輯器中一個(gè)”Enter”鍵代表著“回車換行”,而非“換行回車”,至少在textarea域中是這樣的。

總結(jié)

以上是生活随笔為你收集整理的正则表达式(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

欧美日韩国产在线观看 | 人人草人人草 | 二区三区在线视频 | 精品国产免费人成在线观看 | 狠狠干.com | 黄色电影在线免费观看 | 最新久久免费视频 | 亚洲理论在线观看电影 | 精品国产乱码久久久久久三级人 | 国产色网 | av在线免费在线观看 | 福利电影一区二区 | 日韩精品aaa | 欧美日本一二三 | 永久免费观看视频 | 成年人黄色大片在线 | 96亚洲精品久久 | 男女免费av| 婷婷六月天综合 | 一区 二区电影免费在线观看 | 免费av在线网 | 在线观看的av网站 | 色橹橹欧美在线观看视频高清 | 婷婷色资源 | 色综合婷婷久久 | 日本不卡久久 | 日韩特级毛片 | 久久精品久久精品久久39 | 亚洲精品高清在线 | 最近中文字幕国语免费av | 深夜视频久久 | 五月婷婷久 | 九九热只有这里有精品 | 免费观看的av| 在线精品视频免费观看 | 99精品电影 | 天天干天天搞天天射 | 狠狠干在线 | 久久国产精品久久久久 | 久久激情日本aⅴ | 永久免费毛片在线观看 | 久久爱992xxoo | 久久精品一二三区白丝高潮 | 日韩精品久久久久 | 国产91探花 | 天天综合天天做 | 在线观看黄色的网站 | 日韩毛片在线一区二区毛片 | 91免费高清观看 | 久久综合欧美精品亚洲一区 | 中文字幕电影高清在线观看 | 色之综合网 | 久草免费在线 | 99久久网站| 美女免费网视频 | 香蕉视频在线播放 | 97视频免费在线 | 国产精品九九久久99视频 | 玖玖视频在线 | 一区二区三区免费在线播放 | 日韩精品播放 | 丁香婷婷色综合亚洲电影 | 日本在线观看一区二区三区 | 色婷婷电影 | 69精品人人人人 | 天堂av免费看| 国产一区二区免费 | 毛片一二区 | 久热这里有精品 | 黄色片亚洲 | 色综合激情久久 | 欧美性高跟鞋xxxxhd | 涩五月婷婷 | 99久久精品免费看国产麻豆 | 人人爽人人爱 | 中文字幕一区二区三区在线视频 | 色婷婷激情 | 999久久久免费精品国产 | 在线视频你懂得 | 欧美激情综合网 | 91大片成人网 | 久久免费在线观看 | 天天天干天天射天天天操 | 国产日韩欧美在线观看 | 久久五月网 | 成人国产精品电影 | 欧美一级电影免费观看 | 在线精品视频在线观看高清 | 私人av| 免费看色的网站 | 日韩激情片在线观看 | 成人免费网站在线观看 | 国产精品国产亚洲精品看不卡15 | 成人久久久久久久久久 | 久久黄色片子 | 国产成人在线一区 | 国产精品久久艹 | 麻花天美星空视频 | 欧美特一级片 | 欧美日韩在线精品一区二区 | 黄色小说在线免费观看 | 国产精品成人自产拍在线观看 | 精品毛片一区二区免费看 | 国产在线视频一区 | 日韩视频一区二区在线 | 超级碰99 | 日日夜夜艹 | 国产黄色av影视 | 欧美一二三区在线观看 | 久久久久久国产精品久久 | 国产午夜三级一区二区三桃花影视 | 久久综合9988久久爱 | 国产精品区二区三区日本 | 日韩在线观看免费 | 欧美aa一级片 | 青草视频免费观看 | 夜色资源站wwwcom | 成人av直播 | 国产成本人视频在线观看 | 久久激情小说 | 天堂在线视频中文网 | 天天爽夜夜爽精品视频婷婷 | 日韩性片 | 国产99久久久国产精品免费看 | 久久久久久美女 | 欧美一区免费观看 | 精品久久久久久久久久久久久 | 国内外激情视频 | 爱av在线网 | 欧美午夜剧场 | 欧美激情精品久久久久 | 国产精品乱码久久久久久1区2区 | 国产一区欧美日韩 | 久久这里有精品 | 天天操天天干天天操天天干 | 久久国产欧美日韩精品 | 欧美少妇xxx | 99视频国产精品 | 国产福利av在线 | 一级黄色大片 | 青青河边草免费视频 | 韩国av电影在线观看 | www久久久久 | 亚洲欧美乱综合图片区小说区 | 96精品高清视频在线观看软件特色 | 九九热在线播放 | 久视频在线| 一区二区在线电影 | 一区二区三区高清不卡 | 久久人人爽人人爽人人片av软件 | 国产精品自产拍在线观看蜜 | 欧美午夜性生活 | www.国产精品 | 欧美综合在线视频 | 久久精品国产亚洲a | 精品久久久久久国产偷窥 | 免费黄a | 91传媒91久久久 | 一区二区三区电影大全 | 久久精品视频在线 | 日韩美在线观看 | 国产国产人免费人成免费视频 | 天天射日 | 香蕉视频网站在线观看 | 日韩美女免费线视频 | 久久婷婷一区二区三区 | 天天操天天舔天天爽 | 日韩99热| 国产亚洲精品久久 | 日韩高清毛片 | 日韩精品免费在线观看视频 | 成人在线观看网址 | 天天操天天摸天天射 | 久草在线资源观看 | 麻豆国产精品一区二区三区 | 色婷婷视频在线观看 | 日本午夜免费福利视频 | 一区二区三区中文字幕在线 | 亚洲综合成人在线 | 欧美老人xxxx18 | 黄色大片日本免费大片 | 久久综合免费视频 | 五月激情久久久 | 人人插人人看 | 五月综合久久 | 国产在线精品区 | 免费看国产曰批40分钟 | 亚洲精品乱码久久久久久蜜桃不爽 | 91精选在线观看 | 人人看人人草 | 69精品视频在线观看 | 亚洲三级在线播放 | 91色国产| 天天伊人狠狠 | 久精品视频免费观看2 | 五月婷婷激情六月 | 免费在线黄色av | 97天堂| 色吊丝在线永久观看最新版本 | av在线网站大全 | 亚洲一级片免费观看 | 欧美一区二区伦理片 | 国产一区免费看 | 日韩在线中文字幕 | 久久成人亚洲欧美电影 | 日韩久久片 | 毛片网在线观看 | 久久久麻豆精品一区二区 | 五月天激情婷婷 | 亚洲高清资源 | 国产成人av网站 | 国产精品原创 | 992tv在线成人免费观看 | 婷婷综合导航 | 国产精品一区在线观看你懂的 | 插久久| 91探花在线视频 | 天天草夜夜 | 国产明星视频三级a三级点| 麻豆视频国产在线观看 | 亚洲少妇影院 | 激情五月在线视频 | 色综合天天综合 | 国产成人久久精品77777 | 色人久久 | 日韩欧美精品在线视频 | 国产拍在线 | 久久午夜羞羞影院 | 日日干夜夜草 | 婷婷色吧 | 男女拍拍免费视频 | 欧美在线观看禁18 | 999久久久久 | 香蕉在线视频播放网站 | 奇米网网址 | 日韩激情精品 | 国产精品自拍av | 色夜影院 | 久久手机精品视频 | 国产午夜在线 | 久久国产热视频 | av在线中文| 夜夜夜草 | 中文字幕资源在线观看 | 这里只有精品视频在线观看 | 国产精品久久久免费 | 国产亚洲午夜高清国产拍精品 | 免费国产在线精品 | 国产精品九九九 | 免费亚洲视频在线观看 | 亚洲精品91天天久久人人 | 国产黄a三级三级三级三级三级 | 亚洲狠狠操 | 蜜臀av性久久久久av蜜臀妖精 | 色视频在线| 日韩影视在线观看 | 又爽又黄又无遮挡网站动态图 | 精品国产成人 | 国产99久久99热这里精品5 | 黄色影院在线免费观看 | 亚洲美女视频网 | 天天操天天射天天爱 | japanese黑人亚洲人4k | 日韩三区在线观看 | 国产精品网站一区二区三区 | 亚洲综合在线播放 | 国产视频在线观看免费 | 五月丁婷婷 | 国产91精品一区二区麻豆网站 | 久草a在线 | 在线观看 国产 | 国产成人精品久久久久 | 亚洲va欧美va国产va黑人 | 91日韩精品一区 | 欧美大片mv免费 | 97精品视频在线 | 久久av高清| 亚洲精品在线视频播放 | 在线色吧| 亚洲精品中文字幕在线观看 | 日韩欧美高清一区二区三区 | 婷婷六月天丁香 | 五月天,com| av丁香花 | 狠狠躁夜夜躁人人爽超碰91 | 成人在线一区二区 | 免费黄色av片 | 国产在线观看91 | 丁香婷婷电影 | 97**国产露脸精品国产 | 99精品国产免费久久久久久下载 | 天天操综 | 国产精品毛片一区二区 | 久久伊人国产精品 | 国产精品日韩在线 | 国产一级淫片免费看 | 在线观看的a站 | 韩日精品在线 | 中文字幕免费播放 | 97精品在线观看 | 亚洲 综合 国产 精品 | 一级成人免费视频 | 伊在线视频| 性色av免费在线观看 | 992tv在线观看网站 | 麻豆超碰| 国语自产偷拍精品视频偷 | 丁香婷婷成人 | 亚洲精品资源在线观看 | 99热在| 久久人人97超碰国产公开结果 | 五月婷激情| 久久人人看 | 国产精品热视频 | 日韩三级免费 | 97视频资源| 国产午夜一区二区 | 国产精品露脸在线 | 最近2019年日本中文免费字幕 | 激情av资源 | 国产999精品久久久久久 | 国产网站在线免费观看 | 亚洲午夜大片 | 8090yy亚洲精品久久 | 国产美女免费观看 | 成人毛片一区 | 国产九色在线播放九色 | 五月天堂网 | 亚洲japanese制服美女 | 午夜在线国产 | 黄色在线看网站 | 人人干干人人 | 久久久久久久久艹 | 久久久精品综合 | 中文字幕 国产专区 | 亚洲 欧洲av| 综合在线亚洲 | 操久久网| 日本高清免费中文字幕 | 中文字幕在线视频国产 | 午夜视频日本 | 天天天操天天天干 | 99热在线看| 狠狠狠狠狠操 | 一区二区毛片 | 成 人 黄 色视频免费播放 | 天天爱天天爽 | 五月天久久婷 | 在线亚洲欧美视频 | 久久免费国产精品1 | 日韩在线电影 | 欧美在线观看视频一区二区三区 | 成年人视频在线 | 婷婷激情小说网 | 亚洲一区二区三区四区在线视频 | 国产精品一区二区三区免费视频 | 欧美精品小视频 | 97高清视频 | 久久国产精品久久w女人spa | h网站免费在线观看 | 成年性视频 | 日韩视频在线不卡 | 在线免费观看的av网站 | 97综合在线| 亚洲一区视频免费观看 | 欧美色伊人 | 韩国一区二区在线观看 | 在线观看视频你懂的 | 国产精品中文 | 久久免费观看视频 | 婷色在线 | 伊人黄| 在线欧美中文字幕 | 国色综合 | 麻豆视频www | 免费亚洲视频 | 日韩av中文在线 | www.久久久.com | 久久视| 久久久久蜜桃 | 日韩一区正在播放 | 欧洲色吧 | 99久久精品久久久久久动态片 | 97狠狠操 | 国产视频 亚洲视频 | 国产 在线 日韩 | 日批在线观看 | 在线观看免费视频你懂的 | 99精品国产一区二区三区不卡 | 99热最新网址 | 中国一级片在线播放 | 久久国产精品视频免费看 | 四虎影视成人永久免费观看视频 | 午夜精品电影一区二区在线 | 韩国av一区二区三区在线观看 | 国产精品尤物 | 成人福利在线观看 | 欧美一级艳片视频免费观看 | 乱男乱女www7788 | 一区二区三区电影在线播 | 大荫蒂欧美视频另类xxxx | 国内久久久久久 | 亚洲精品在线一区二区 | 精品中文字幕在线 | 成人欧美一区二区三区在线观看 | 欧美成天堂网地址 | 人人盈棋牌 | 毛片基地黄久久久久久天堂 | 在线观看精品国产 | 国产99在线免费 | 97在线播放 | 最近高清中文在线字幕在线观看 | 国产亚洲午夜高清国产拍精品 | 成人小视频在线观看免费 | 国产露脸91国语对白 | 成年人黄色大片在线 | 亚洲二区精品 | 四虎永久视频 | 激情久久影院 | 六月丁香婷婷久久 | 色精品视频 | 97av超碰| 少妇bbw揉bbb欧美 | 在线视频区 | 高清久久久 | 亚洲成人黄色 | 色噜噜狠狠狠狠色综合久不 | 国产精品免费小视频 | 日韩高清在线看 | 亚洲精品在线观看网站 | 久久综合中文色婷婷 | 干天天 | 欧美最猛性xxx | 亚洲不卡123 | 国产99自拍 | 黄色精品视频 | 国产成人精品国内自产拍免费看 | 探花视频在线版播放免费观看 | 亚洲污视频 | 国产自在线观看 | 精品在线观看一区二区 | 色综合久久天天 | 午夜精品久久久久99热app | 97视频免费在线 | 亚洲伊人天堂 | 天天摸天天操天天爽 | 美女网色 | 国产一级二级三级在线观看 | 国产91大片 | 日日摸日日添日日躁av | av不卡网站 | 丁香婷婷综合五月 | 一本一本久久a久久精品牛牛影视 | 欧美精品中文字幕亚洲专区 | 国产精品久久99精品毛片三a | 91超碰在线播放 | 国产一级二级在线播放 | 色中色资源站 | 久久久国产日韩 | 亚洲三区在线 | 久要激情网 | 亚洲精品小区久久久久久 | 久久精品99久久久久久 | 最近高清中文字幕在线国语5 | 成人h动漫精品一区二 | 亚洲精品美女视频 | 亚洲精品视频久久 | 久久午夜羞羞影院 | 欧美性生活一级片 | 黄色电影网站在线观看 | 在线观看成人 | 99久久婷婷国产 | 91在线播放视频 | 麻豆视频免费入口 | 青青草华人在线视频 | 91中文字幕 | 一性一交视频 | 欧美性久久久 | 色综合久久66 | 国产高清在线观看 | av成人免费 | 国产91影视 | 日韩中文在线电影 | 97电影在线观看 | 91香蕉视频色版 | 色综合天天综合网国产成人网 | av电影免费在线看 | 人人插人人澡 | 欧美a√在线 | 国产精品大片免费观看 | 99久久久国产精品免费99 | 久久精品精品电影网 | 久久毛片视频 | 国产中文在线观看 | 成人免费观看网站 | 国产一区二区高清不卡 | 色婷婷88av视频一二三区 | 日本精品一区二区三区在线播放视频 | 国产高清福利在线 | 国产精品福利一区 | 日韩中文字幕免费看 | 久久九九九九 | 国产高清av在线播放 | 久久 一区 | 青春草免费视频 | 超碰国产在线播放 | 欧美极品少妇xbxb性爽爽视频 | 欧美午夜理伦三级在线观看 | 中文字幕精品久久 | 亚洲国产精品一区二区久久,亚洲午夜 | 麻豆手机在线 | 日本中文一区二区 | 婷婷五月在线视频 | 91福利视频久久久久 | 日本精品一区二区在线观看 | 婷婷在线观看视频 | 日日干 天天干 | 日日爽天天 | 在线观看国产福利片 | 免费成视频 | 免费视频91蜜桃 | 青草视频在线播放 | 国产美腿白丝袜足在线av | 五月婷婷色综合 | 日韩精品一区在线观看 | 91免费高清观看 | 日韩中文字幕国产 | 亚洲91中文字幕无线码三区 | 国产小视频国产精品 | 天天操天天操一操 | 午夜三级影院 | 精品视频在线免费 | 波多野结衣电影一区 | 99精品国产aⅴ | 日本在线精品视频 | 国产手机视频在线 | 国产日韩欧美在线一区 | 一本色道久久精品 | 国产午夜精品一区二区三区 | 日本最新高清不卡中文字幕 | 欧美国产日韩激情 | 久久不见久久见免费影院 | 国产成人精品福利 | 美女免费视频网站 | 精品久久久久免费极品大片 | 狠狠操在线 | 日本一区二区不卡高清 | 久久久久久久免费 | 欧美成人黄 | 99久久99久久精品国产片 | 自拍超碰在线 | 国内精品久久久久久久久久久 | 亚洲天堂精品视频 | 九九九视频精品 | 91久久精品一区二区三区 | 极品嫩模被强到高潮呻吟91 | 免费十分钟 | 中文字幕在线观看av | 国产97在线视频 | 国产一区二区久久精品 | 中文字幕在线观看完整 | 99高清视频有精品视频 | 九色91视频| 天天看天天干天天操 | 国产福利专区 | 97在线观看免费高清完整版在线观看 | 色鬼综合网 | 国产福利av | 欧美午夜寂寞影院 | 在线91色 | 日韩一级精品 | 久久国产精品99久久久久久老狼 | 国产麻豆视频 | 国产精品女人网站 | 免费色视频网址 | 婷婷四房综合激情五月 | 国产亚洲婷婷免费 | 黄a在线看| 人人射人人爽 | 天天看天天干 | 精品国产一区二区三区蜜臀 | 国产高清中文字幕 | 久久激情视频 久久 | 色视频成人在线观看免 | 亚洲黄色免费电影 | 在线色亚洲 | 91视频久久 | 国产亚洲精品电影 | 99久久精品久久久久久清纯 | 91精品国自产在线观看 | 久久麻豆精品 | 国产日韩精品一区二区在线观看播放 | 久久精品亚洲综合专区 | 亚洲精品视频免费在线 | 日韩精品中文字幕在线播放 | av黄色av| 久久在线看 | 狠狠综合久久 | 黄av免费| 97理论片| 99在线精品观看 | 久久久69 | 久久亚洲电影 | 中文字幕日本在线 | 色综合久久88色综合天天免费 | 免费看的黄色的网站 | 伊人色综合久久天天 | 精品一区二区电影 | 日韩在线观看视频一区二区三区 | 超碰午夜 | 日韩精品你懂的 | 毛片美女网站 | 99se视频在线观看 | 国内精品久久久久久久久久久久 | 久久免费av电影 | 在线成人免费电影 | 国产99在线免费 | 久久艹国产视频 | 久久精品国产精品亚洲 | 亚洲第一久久久 | 97免费| 久久99网站 | 狠狠色狠狠色综合系列 | 国产色网 | 国产第一页在线观看 | 婷婷精品国产欧美精品亚洲人人爽 | 天天摸天天舔天天操 | av电影在线播放 | 国内丰满少妇猛烈精品播 | 在线免费视频一区 | 国产精品激情偷乱一区二区∴ | 国产精品麻豆免费版 | 亚洲专区中文字幕 | 欧美乱码精品一区 | 成年人免费看的视频 | 国产精品观看在线亚洲人成网 | 四虎成人精品在永久免费 | av在线播放一区二区三区 | 亚洲va综合va国产va中文 | 精品资源在线 | 成人在线视频论坛 | av一二三区| av三级在线免费观看 | 天天射天天爱天天干 | 91人人人| 色天天久久 | 国产精品原创视频 | 激情影音先锋 | 91视频在线免费 | 国产精品国产三级国产专区53 | 国产 在线观看 | 日韩在线观看三区 | 精品国产成人在线 | 99热在线国产 | 91久久久久久国产精品 | 一区 在线观看 | 久久国产免费视频 | 精品国产_亚洲人成在线 | 九色91av| 免费的黄色av | 一区二区视频网站 | 久久精品国产精品亚洲精品 | 麻豆一区二区三区视频 | 91精品国产自产老师啪 | 99久久久久久久 | 国产成人一区二区精品非洲 | 国产不卡免费av | 中文一区在线观看 | 最新国产精品视频 | 97操操操| 精品国产亚洲在线 | 亚洲精品在线视频网站 | 欧美人体xx | 99r精品视频在线观看 | 免费av一级电影 | 91在线免费观看国产 | 国产一区二区在线观看视频 | 91在线蜜桃臀 | 91最新网址 | 日韩电影中文字幕在线 | 超碰官网 | 成人在线视频网 | 中文国产成人精品久久一 | 免费看黄色小说的网站 | www.久久色 | 91丨九色丨国产在线观看 | 人人爽人人看 | 日韩免费看片 | av高清不卡 | 日韩国产精品久久 | 免费在线观看视频a | 国产精品入口a级 | 午夜av影院 | 欧美99精品| 中文字幕你懂的 | 国产精品一区二区在线免费观看 | 在线观看亚洲成人 | 狠狠地操 | 国产在线中文字幕 | 99视频偷窥在线精品国自产拍 | 日韩高清免费在线观看 | 国产亚洲精品成人av久久ww | www..com黄色片| 免费能看的av | 天天爽天天搞 | 国产在线欧美日韩 | 福利视频网站 | 91在线免费播放视频 | 一区二区三区免费网站 | 92中文资源在线 | 国产一级黄| 91亚洲综合| av在线影片 | 午夜影院日本 | 久久综合天天 | 99热精品在线 | 日本公妇在线观看 | 99久久精品网| 在线国产激情视频 | 久久兔费看a级 | 天天干,天天操,天天射 | 在线日韩av| 欧美aaa视频 | 久久久久久久久久久久久9999 | 在线观看国产www | 国精产品999国精产品视频 | 精品你懂的 | 成人久久18免费网站麻豆 | 欧美日韩视频在线播放 | 丁香六月久久综合狠狠色 | av在线收看 | 日韩免费 | 91热这里只有精品 | 国产美女无遮挡永久免费 | 精品字幕在线 | 91综合久久一区二区 | 午夜在线免费视频 | 西西444www| 精品国产色| 中文字幕在线有码 | 国产 日韩 在线 亚洲 字幕 中文 | 99热国产在线 | 国产成人精品一区二区三区 | 国产精品视频专区 | 亚洲欧美视频在线播放 | 国产免费作爱视频 | 在线午夜电影神马影院 | 人人看看人人 | 欧美一级性视频 | 国产精品综合在线观看 | 91爱爱免费观看 | 天堂在线免费视频 | 久久久www| 欧美性精品 | av免费网站观看 | 欧美大片在线看免费观看 | 久爱精品在线 | 91精品黄色| 欧美日韩后 | 国产视频美女 | 国产在线免费av | 97超碰在线人人 | 亚洲高清久久久 | 久久久精品亚洲 | 国产麻豆果冻传媒在线观看 | 国产福利91精品 | 久久美女精品 | 午夜精品一区二区三区在线观看 | 久久久久女人精品毛片九一 | 狠狠干成人综合网 | 四川bbb搡bbb爽爽视频 | 成年人精品 | 在线激情网 | 国产黄色精品 | 久久天天躁夜夜躁狠狠躁2022 | 免费的成人av | 欧美黑人巨大xxxxx | 亚洲成人av一区二区 | 国产精品一区在线 | 国产在线观看 | 久久国产视频网站 | 成人中文字幕在线 | 成人在线视 | 国产色a在线观看 | 黄av免费在线观看 | 国产精品免费视频一区二区 | 超碰97免费观看 | 国产成人久 | 又黄又爽又无遮挡免费的网站 | av免费在线免费观看 | 美女免费网视频 | 亚洲美女免费视频 | a视频在线观看 | 18国产精品白浆在线观看免费 | 在线观看一级片 | 天天操天天插 | 久久国产精品偷 | 久久69av| 精品久久一区二区三区 | 九九亚洲视频 | 日本中文字幕在线观看 | 五月婷婷六月丁香在线观看 | 在线观看a视频 | 国产91对白在线播 | 久久不卡免费视频 | 久久久综合香蕉尹人综合网 | 久久99精品国产99久久6尤 | 91成人观看| 99久久爱| 综合久色 | 久久黄色免费观看 | 这里只有精彩视频 | 91精品视频在线免费观看 | 欧美狠狠色 | 黄色在线网站噜噜噜 | 四虎永久免费在线观看 | 日韩精品免费 | 欧美日韩在线电影 | 看片一区二区三区 | 黄色亚洲精品 | 日本在线观看一区 | 欧美男同网站 | 久久国产精品99久久久久久老狼 | 97香蕉视频| 91桃色免费视频 | 免费看国产视频 | 国产又粗又猛又爽又黄的视频免费 | 碰天天操天天 | 欧美日本高清视频 | 免费黄色在线网址 | 久久国产精品视频免费看 | 久草网在线视频 | 91视频久久久久久 | 六月丁香婷 | 亚洲精品久久久久久久蜜桃 | 久久综合精品一区 | 亚洲国产免费看 | 国产精品你懂的在线观看 | 国产精品午夜av | 欧美激情视频三区 | 国产麻豆精品传媒av国产下载 | 91精品国产成人 | 久久综合久久综合这里只有精品 | 激情在线网站 | 中文字幕精品在线 | 五月天婷婷在线观看视频 | 天天操天天色天天射 | 亚洲成av片人久久久 | 狠狠色噜噜狠狠狠狠 | 中文字幕在线视频一区二区三区 | 国产精品第 | 一二三久久久 | www色,com | 国产在线久草 | 国产精品国产三级国产aⅴ入口 | 久久精品久久精品久久 | 97日日碰人人模人人澡分享吧 | 很污的网站 | 狠狠干天天 | 久久99视频| 99热999| 一区二区精品在线 | 国产精品地址 | 美女久久久久久久 | 97成人在线观看 | 99爱精品视频 | 精品国产成人av | 久久久久欠精品国产毛片国产毛生 | 日韩欧美高清视频在线观看 | 97超碰在线免费 | 亚洲欧美日韩国产精品一区午夜 | 精品av在线播放 | 草久视频在线 | 中文字幕在线观看免费观看 | 国产在线免费av | 成人黄色一级视频 | 97精产国品一二三产区在线 | 日日干天天插 | 99视频99| 亚洲国产69| 久视频在线 | 五月婷婷在线视频 | 亚洲欧洲久久久 | 亚洲精品xx | 人人狠| 久久久久 免费视频 | 一级一片免费视频 | 色在线国产 | 日日操日日操 | av福利第一导航 | 免费看黄在线看 | 欧美成人精品三级在线观看播放 | 国产精品电影在线 | 91视频在线观看大全 | 国产黄色精品在线观看 | 九色视频自拍 | 黄色资源网站 | 四虎免费在线观看视频 | 丁香久久 | 久久久精品日本 | 久草精品视频 | 97电影在线 | 国产成人精品女人久久久 | 亚洲理论在线观看电影 | 999久久国产精品免费观看网站 | 日日夜夜天天操 | 香蕉久草 | www.亚洲视频.com| 天天操天天射天天爽 | 福利区在线观看 | 六月天综合网 | 中文字幕欧美日韩va免费视频 | 久久免费视频5 | 国产丝袜制服在线 | 久久久久久国产精品久久 | 国产 精品 资源 | 日韩欧美在线视频一区二区 | 91av精品 | 99视频精品视频高清免费 | 亚洲欧美国产精品 | 日韩成人免费电影 | 亚洲精品在线观看免费 | 永久免费av在线播放 | 一区中文字幕在线观看 | 91九色性视频 | 久久超碰99| 在线观看免费中文字幕 | 久久精品人 | 亚洲综合视频在线 | 免费 在线 中文 日本 | 激情久久伊人 | 国产精品第一页在线 | 日日爱av| av在线免费观看黄 | 婷婷久久综合网 | 国产在线看一区 | 欧美日本一二三 | 国产激情久久久 | av网站在线免费观看 | 国产91九色蝌蚪 | 精品国产乱码久久久久久1区2匹 | 欧美狠狠操 | 97超碰在线久草超碰在线观看 | 日日干综合 | 国产精品手机在线观看 | 69人人 | 亚洲国产中文字幕在线观看 | 激情网五月婷婷 | 91看片在线免费观看 | 日韩视频在线一区 | 久久香蕉国产精品麻豆粉嫩av | 欧美在线1区 | 欧美俄罗斯性视频 | 91在线免费公开视频 | 天天综合91 | 色伊人网| 亚洲高清在线视频 | 精品一二三区视频 | 国产精品免费在线播放 | 深爱激情综合网 | 亚洲精品美女视频 | 天天玩天天干天天操 | 亚洲伦理电影在线 | 99这里只有 | 最近最新最好看中文视频 | 国产视频精品网 | 亚洲精品国产综合99久久夜夜嗨 | 伊人视频 | 热99在线 | 日本动漫做毛片一区二区 | 精品女同一区二区三区在线观看 | 亚洲日日夜夜 | www好男人| 国产裸体永久免费视频网站 | 国产对白av | 九精品 | 国产精品毛片完整版 | 欧美激情视频一区二区三区免费 | 免费视频xnxx com | 天天射天天 | 久久成人高清视频 | 欧美做受高潮 | 中文字幕在线观看日本 | 97香蕉超级碰碰久久免费软件 | 在线观看视频国产一区 | 亚州精品天堂中文字幕 | 国产精品久久久久久久久大全 | 在线免费日韩 | 久精品一区 | 精品国模一区二区三区 | 性色av一区二区三区在线观看 | 精品久久久免费视频 | 国产精品欧美一区二区 | 国产精美视频 | 国产xxxxx在线观看 | 日韩毛片在线播放 | 久久精品在线视频 | 国产aaa免费视频 |