日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

什么是正則?

正則表達(dá)式(regular expression)是一種表達(dá)文本模式(即字符串結(jié)構(gòu))的方法,有點(diǎn)像字符串的模板,常常用來(lái)按照“給定模式”匹配文本。比如,正則表達(dá)式給出一個(gè) Email 地址的模式,然后用它來(lái)確定一個(gè)字符串是否為 Email 地址。JAVAScript 的正則表達(dá)式體系是參照 Perl 5 建立的。

建立正則表達(dá)式

使用內(nèi)置RegExp構(gòu)造函數(shù)

var reg=new RegExp("martin");

直接建立

var reg=/martin/;

以上兩種建立正則的方式是等效的,,不過(guò)一般第二種方式用的更多一些。

接受參數(shù)

正則表達(dá)式除了接受一個(gè)字面量字符參數(shù),還可以接受一個(gè)修飾符作為參數(shù)。

var reg=/martin/g
//var reg=new RegExp("martin","g");

說(shuō)完基本的正則概念和接受參數(shù),接下來(lái)說(shuō)一下正則的匹配規(guī)則,這一塊也是面試和筆試考察的重點(diǎn)。

匹配規(guī)則

在說(shuō)匹配規(guī)則之前我們先說(shuō)一下正則中的字符分類。

字面量字符和元字符

字面量字符:只表示它字面的含義,就像上面代碼中的martin,也就是實(shí)際用于匹配的字符。

元字符:不代表字符本身字面的意思,而是有特殊含義的字符,也就是幫助字面量字符達(dá)到更好的匹配效果的輔助字符。

其中元字符又分為很多類,具體類型如下:

正則表達(dá)式詳解

元字符分類

  • 點(diǎn)字符(.)
var reg=/1.3/; //表示匹配1和3之間包含任意一個(gè)字符的情況,除特殊符外,如:"1-3","1.3","123"等;
 //但是一個(gè)點(diǎn)只能匹配一個(gè)字符,如:"1223"則無(wú)法匹配成功
  • 位置字符(^和$)
var reg=/^13/; //表示以"13"字符串開(kāi)頭的字符串
reg.test("134") //true
var reg=/13$/; //表示以"13"字符串結(jié)束的字符串
reg.test("134") //false
reg.test("4 31") //true
var reg=/^13$/; //注意:表示從開(kāi)始到結(jié)束位置只有"13"這個(gè)字符串
reg.test("13") //true
reg.test("1313") //false

注意: /^13$/ 這個(gè)正則表達(dá)式很容易讓人理解成匹配以字符串"13"開(kāi)始和結(jié)尾的字符串,如:"1313",但實(shí)際上它是表示從開(kāi)始到結(jié)束位置只有"13"這個(gè)字符串。

  • 選擇符(|)
var reg=/11|22||33/; //表示匹配"11"或者"22"或者"33"
reg.test("11") //true
reg.test("22") //true

注意:選擇符會(huì)匹配包括它前后的多個(gè)字符,比如 /11|22/ 指的是匹配"11"或者"22",而不是指匹配1或者2,。如果想匹配1或者2,可以添加括號(hào)來(lái)實(shí)現(xiàn),如:

var reg=/1(1|2)2/;
reg.test("112") //true
reg.test("122") //true

轉(zhuǎn)義字符

如果要在正則表達(dá)式中使用具有特殊含義的字符,如:$,^等,也就是如果要匹配它們本身,那就需要用到轉(zhuǎn)義字符了,也就是在他們前面加上""反斜杠,比如要匹配$,則寫成$。

正則表達(dá)式中,需要反斜杠轉(zhuǎn)義的,一共有12個(gè)字符:^、.、[、$、(、)、|、*、+、?、{和\。需要特別注意的是,如果使用RegExp方法生成正則對(duì)象,轉(zhuǎn)義需要使用兩個(gè)斜杠,因?yàn)樽址畠?nèi)部會(huì)先轉(zhuǎn)義一次。

.

var reg=/1$/; //表示匹配字符串"1$",而不是以1結(jié)尾的字符串
reg.test("1") //false
reg.test("1$") //true

特殊字符

正則表達(dá)式對(duì)一些不能打印的特殊字符,提供了表達(dá)方法。

  • cX 表示Ctrl-[X],其中的X是A-Z之中任一個(gè)英文字母,用來(lái)匹配控制字符。
  • [b] 匹配退格鍵(U+0008),不要與b混淆。
  • n 匹配換行鍵。
  • r 匹配回車鍵。
  • t 匹配制表符 tab(U+0009)。
  • v 匹配垂直制表符(U+000B)。
  • f 匹配換頁(yè)符(U+000C)。
  • 匹配null字符(U+0000)。
  • \xhh 匹配一個(gè)以兩位十六進(jìn)制數(shù)(\x00-\xFF)表示的字符。
  • \uhhhh 匹配一個(gè)以四位十六進(jìn)制數(shù)(\u0000-\uFFFF)表示的 Unicode 字符。

字符類

字符類表示有一系列字符可供選擇,只要匹配其中一個(gè)就可以。表示方法為將所有可供選擇的字符都放在方括號(hào)內(nèi),比如[xyz]表示匹配x、y、z中的任意一個(gè)就可以。

var reg=/[abc]/; //表示匹配a,b,c中任一字符皆可
reg.test("hello") //false
reg.test("Apple") //true

說(shuō)到這里同學(xué)們應(yīng)該會(huì)想到之前說(shuō)過(guò)的選擇符吧,[xyz]就等效于(x|y|z),兩者可相互轉(zhuǎn)換。

Q:那既然兩種字符功能可以相互轉(zhuǎn)換,為啥有了選擇符還要字符類呢?

A:因?yàn)樽址惓四鼙硎具x擇,還包括另外兩種字符,脫字符和連字符,這兩種字符又有新的功,可以將字符類理解成選擇符的一種超集。

  • 脫字符(^)

表示可以匹配除字符類中字符以外的所有字符,因?yàn)檫@個(gè)符號(hào)和位置字符中的"^"開(kāi)始位置字符是相同的,所以在使用時(shí)要注意區(qū)別,直接"^"放在正則表達(dá)式開(kāi)頭的是位置字符,放在"[]"中開(kāi)頭的"^"表示的是脫字符。

var reg=/^123/; //位置字符
reg.test("1234"); //true
var reg=/[^123]/; //脫字符
reg.test("123"); //false
reg.test("4") //true
  • 連字符(-)

表示匹配連續(xù)字符序列中的任意一個(gè)字符,如:[abcdef]可以寫成[a-f],[012345678]可以寫成[0-9]等,這大大提升了字符類書(shū)寫的簡(jiǎn)便性。

var reg=/0-9/; //表示匹配字符串"0-9"
reg.test("0") //false
reg.test("0-9")//true
var reg=/[0-9]/;
reg.test("0") //false

==注意:雖然連字符用起來(lái)十分簡(jiǎn)便,但是一定要避免過(guò)度使用連字符,因?yàn)檫B字符往往設(shè)定的是一個(gè)比較大的范圍,如果不注意可能會(huì)匹配到意料之外的一些字符。比如:[A-z],表面上它是要匹配到A-Z和a-z這52個(gè)字符,但是實(shí)際上在ASCII編碼中,在Z和a之間還有很多其他字符,所以可能機(jī)會(huì)出現(xiàn)意料之外的匹配效果。

var reg=/[A-z]/;
reg.test('['); //true

分析:因?yàn)?quot;["字符在Z和a之間,所以也能被匹配到。

預(yù)定義模式

預(yù)定義模式是指某些常見(jiàn)模式的簡(jiǎn)寫方式,可以理解成是內(nèi)置的正則表達(dá)。

  • d 匹配0-9之間的任一數(shù)字,相當(dāng)于[0-9]。
  • D 匹配所有0-9以外的字符,相當(dāng)于[^0-9]。
  • w 匹配任意的字母、數(shù)字和下劃線,相當(dāng)于[A-Za-z0-9_]。
  • W 除所有字母、數(shù)字和下劃線以外的字符,相當(dāng)于[^A-Za-z0-9_]。
  • s 匹配空格(包括換行符、制表符、空格符等),相等于[ trnvf]。
  • S 匹配非空格的字符,相當(dāng)于[^ trnvf]。
  • b 匹配詞的邊界。
  • B 匹配非詞邊界,即在詞的內(nèi)部。

重復(fù)類

模式的精確匹配次數(shù),使用大括號(hào)({})表示。{n}表示恰好重復(fù)n次,{n,}表示至少重復(fù)n次,{n,m}表示重復(fù)不少于n次,不多于m次,默認(rèn)匹配的是單個(gè)字符,若想要重復(fù)字符串,可以使用括號(hào)。

var reg=/12{2,5}3/; //默認(rèn)表示匹配單個(gè)字符"2"的次數(shù)為2-5次
reg.test("1223") //true 
reg.test("12123") //false
var reg=/(12){2,5}3/; //表示匹配字符串"12"的次數(shù)為2-5次
reg.test("1223") //false 
reg.test("12123") //true

量詞符

量詞符是內(nèi)置用來(lái)設(shè)定某個(gè)模式出現(xiàn)的次數(shù)的,默認(rèn)也是匹配單個(gè)字符的次數(shù)。

  • ? 問(wèn)號(hào)表示某個(gè)模式出現(xiàn)0次或1次,等同于{0, 1}。
  • * 星號(hào)表示某個(gè)模式出現(xiàn)0次或多次,等同于{0,}。
  • + 加號(hào)表示某個(gè)模式出現(xiàn)1次或多次,等同于{1,}。

貪婪和非貪婪模式

  • 貪婪模式(默認(rèn)):即最大可能匹配,匹配直到下一個(gè)字符不滿足匹配規(guī)則為止,上面說(shuō)的三個(gè)量詞符,默認(rèn)模式都為貪婪模式。
var s = 'aaa';
var reg=/a+/;
s.match(reg); //["aaa"]
  • 非貪婪模式:即最小可能匹配,匹配到一個(gè)滿足匹配規(guī)則的字符就停止,將貪婪模式改為非貪婪模式只需要在量詞符后面加一個(gè)問(wèn)號(hào)。
var s = 'aaa';
var reg=/a+?/;
s.match(reg); //["a"]

總結(jié):

  • *?:表示某個(gè)模式出現(xiàn)0次或多次,匹配時(shí)采用非貪婪模式。
  • +?:表示某個(gè)模式出現(xiàn)1次或多次,匹配時(shí)采用非貪婪模式。

修飾符

修飾符(modifier)表示模式的附加規(guī)則,放在正則模式的最尾部,有g(shù),i,m三種修飾符。

修飾符可以單個(gè)使用,也可以多個(gè)一起使用。

// 單個(gè)修飾符
var reg = /test/i;
// 多個(gè)修飾符
var reg = /test/ig;
  • g修飾符

默認(rèn)情況下,第一次匹配成功后,正則對(duì)象就停止向下匹配了。g修飾符表示全局匹配(global),加上它以后,正則對(duì)象將匹配全部符合條件的結(jié)果,主要用于搜索和替換。

var s = 'aaa';
var reg=/a+?/;
s.match(reg); //["a"]
var s = 'aaa';
var reg=/a+?/g;
s.match(reg); //["a","a","a"]
  • i修飾符

默認(rèn)情況下,正則對(duì)象區(qū)分字母的大小寫,加上i修飾符以后表示忽略大小寫(ignorecase)

var s = 'Aaa';
var reg=/a/;
s.match(reg); //["a"]
var s = 'Aaa';
var reg=/a/i;
s.match(reg); //["A"]
  • m修飾符

m修飾符表示多行模式(multiline),會(huì)修改^和$的行為。默認(rèn)情況下(即不加m修飾符時(shí)),^和$匹配字符串的開(kāi)始處和結(jié)尾處,加上m修飾符以后,^和$還會(huì)匹配行首和行尾,即^和$會(huì)識(shí)別換行符(n)。

var s = 'abn ab';
var reg=/ab$/m;
s.match(reg); //["ab"]
var s = 'abn ab';
var reg=/ab$/gm;
s.match(reg); //["ab","ab"]會(huì)按行進(jìn)行匹配,會(huì)識(shí)別n換行符,這里的第一行以ab結(jié)尾,第二行也以ab結(jié)尾

練習(xí)題

1.常用的11位手機(jī)號(hào)碼驗(yàn)證的正則?

2.常用的郵箱驗(yàn)證的正則?

分享到:
標(biāo)簽:正則表達(dá)式
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定