JavaScript標(biāo)準(zhǔn)庫(kù)系列——RegExp對(duì)象(三)

目錄

導(dǎo)語(yǔ)

1.理解正則表達(dá)式

2.模式的規(guī)則

3.字符串和正則實(shí)例的屬性和方法

4.檢索實(shí)例

5. 小結(jié)


導(dǎo)語(yǔ)

正則表達(dá)式是處理字符串的一門(mén)藝術(shù)手法,應(yīng)用場(chǎng)景經(jīng)常出現(xiàn)在表單驗(yàn)證部分阻荒;
JavaScript高級(jí)程序設(shè)計(jì)一書(shū)開(kāi)篇提到鼓择,JavaScript這門(mén)語(yǔ)言最原始的應(yīng)用就是處理輸入驗(yàn)證操作悦陋,所以正則表達(dá)式從JavaScript誕生那一刻就與其結(jié)下不解之緣挎塌;


1.理解正則表達(dá)式

正則表達(dá)式(Regular Expression)可以理解為規(guī)則表達(dá)式,即以表達(dá)式的形式定義一項(xiàng)規(guī)則梭伐,然后根據(jù)這一規(guī)則去檢索字符串,最后根據(jù)匹配結(jié)果進(jìn)行后續(xù)的處理操作(判斷蚀苛、獲取或是替換等)在验;
正則表達(dá)式根據(jù)創(chuàng)建形式的不同玷氏,可分為字面量和構(gòu)造函數(shù)RegExp對(duì)象堵未;
1.1 字面量方法
正則表達(dá)式的字面量方法由正則模式(pattern)和修飾符(flags)構(gòu)成;

var regExp = /pattern/flags;

1.2 RegExp構(gòu)造函數(shù)
可以通過(guò)RegExp這一構(gòu)造函數(shù)去創(chuàng)建一個(gè)正則表達(dá)式對(duì)象盏触;

var regExp  = new RegExp('pattern','flags')

需要注意的二者不同在于:字面量采用/pattern/渗蟹,而正則對(duì)象采用"pattern"字符串;所以出現(xiàn)轉(zhuǎn)義字符時(shí)赞辩,構(gòu)造函數(shù)創(chuàng)建的正則對(duì)象的參數(shù)需要進(jìn)行轉(zhuǎn)義雌芽;

var regExp = /\hello\/;
var regExp1 = new RegExp('\\hello\\');

1.3 flags規(guī)則
模式的規(guī)則將會(huì)在下文單獨(dú)開(kāi)一章講解,先講述flags規(guī)則辨嗽;
正則表達(dá)式可以添加3個(gè)修飾符從而起到改變檢索規(guī)則的作用世落;

g:表示全局模式,檢索所有字符串糟需,而不是發(fā)現(xiàn)第一個(gè)匹配項(xiàng)時(shí)停止檢索屉佳;
i:表示忽略大小寫(xiě)模式;
m:表示多行模式洲押,進(jìn)行多行的檢索武花;


2. 模式的規(guī)則

模式的規(guī)則是正則表達(dá)式的核心部分,模式可有普通字符(打印字符和非打印字符)和特殊字符構(gòu)成杈帐;

2.1 普通字符
普通字符由所有數(shù)字体箕、中外文字母、標(biāo)點(diǎn)符號(hào)和非打印字符構(gòu)成挑童;
非打印字符包括:

\cx:control-x
\n:換行符累铅;
\r:回車(chē)符;
\t:制表符站叼;
\v:垂直制表符争群;
\f:換頁(yè)符;
\s:空白字符大年,等價(jià)于[\f\n\r\t\v]

2.2 特殊字符
所謂特殊字符换薄,就是具有特殊含義的字符,包括:限定符翔试、定位符轻要、類(lèi)型符、分組符垦缅、條件符冲泥、非獲取匹配符等

限定符
限定符限定一個(gè)正則表達(dá)式出現(xiàn)次數(shù);

*:匹配前面子表達(dá)式任意次,等價(jià)于{0,}凡恍;
+:匹配前面子表達(dá)式1次以上志秃,等價(jià)于{1,};
嚼酝?:匹配前面子表達(dá)式0次或1次浮还,等價(jià)于{0,1};
{n}:匹配子表達(dá)式n次闽巩;
{n,}:匹配子表達(dá)式n次以上钧舌;
{n,m}:匹配子表達(dá)式n~m次之間,默認(rèn)是貪婪模式取m次涎跨,當(dāng)在該限定符后面添加洼冻?開(kāi)啟非貪婪模式;這個(gè)隅很?可應(yīng)用于所有限定符后撞牢;

定位符
定位符能夠高效匹配到字符出現(xiàn)位置;

^:匹配字符串開(kāi)始的位置叔营,注意在[]中表示取反匹配屋彪;
$:匹配字符串結(jié)尾的位置;
\b:匹配字符邊界审编;

類(lèi)型符
類(lèi)型符是小羊自己為了記憶方便定義的撼班,就是可以匹配不同的數(shù)據(jù)類(lèi)型;

.:匹配除換行符的任意字符垒酬;
\w:匹配任何單詞字符砰嘁,等價(jià)于[a-zA-z0-9];
\d:匹配數(shù)字勘究;

分組符

():將表達(dá)式放入圓括號(hào)成為子表達(dá)式矮湘;

條件符

|:分支條件,匹配位于|兩側(cè)的字表達(dá)口糕,相當(dāng)于或缅阳;

非獲取匹配符
非獲取匹配符指的是匹配表達(dá)式但不獲取匹配結(jié)果;

(?:pattern):匹配 pattern 但不獲取匹配結(jié)果景描;
(?=pattern):正向預(yù)查十办,在任何匹配 pattern 的字符串開(kāi)始處匹配查找字符串;
(?!pattern):負(fù)向預(yù)查超棺,在任何不匹配 pattern 的字符串開(kāi)始處匹配查找字符串

取反操作
下面這幾個(gè)都是對(duì)應(yīng)先前特殊字符的取反操作向族;

\D
\W
\B
\S
[^pattern]

反向引用
對(duì)一個(gè)正則表達(dá)式模式或部分模式兩邊添加圓括號(hào)將導(dǎo)致相關(guān)匹配存儲(chǔ)到一個(gè)臨時(shí)緩沖區(qū)中,所捕獲的每個(gè)子匹配都按照在正則表達(dá)式模式中從左到右出現(xiàn)的順序存儲(chǔ)棠绘。緩沖區(qū)編號(hào)從 1 開(kāi)始件相,最多可存儲(chǔ) 99 個(gè)捕獲的子表達(dá)式再扭;

Is is the cost of of gasoline going up up?
/\b([a-z]+) \1\b/gi
匹配Is is和up  up

3.字符串和正則實(shí)例的屬性和方法

3.1 字符串的方法

match:接受正則表達(dá)式,返回匹配結(jié)果夜矗;

replace:接受兩個(gè)參數(shù)泛范,第一個(gè)為正則,第二個(gè)為替換值(也可以是一個(gè)函數(shù))紊撕,返回新字符串罢荡,不改變?cè)址?/p>

3.2 正則實(shí)例的屬性和方法
正則實(shí)例的屬性
正則實(shí)例的屬性主要包括ignoreCase、global逛揩、multiline返回是否設(shè)置修飾符的布爾值柠傍,lastIndex返回下一次開(kāi)始搜索的位置麸俘,source返回正則表達(dá)式的字符串形式辩稽;


正則實(shí)例的屬性

test:傳入一個(gè)字符串,返回布爾值表示匹配結(jié)果的判斷从媚;帶有修飾符g時(shí)逞泄,每一次test方法都從上一次結(jié)束的位置開(kāi)始向后匹配;
exec:傳入一個(gè)字符串拜效,返回匹配結(jié)果的數(shù)組喷众;


3.檢索實(shí)例

下面根據(jù)目前常用的表單驗(yàn)證時(shí)用到的正則,給出幾個(gè)檢索的案例紧憾;解到千;
3.1 手機(jī)號(hào)碼檢索

function isPhoneNum(str){
                //020-80723000
                //07518869865
                //13832132341
                var regExp = /^0\d{2}[-]?\d{8}|^0\d{3}[-]?\d{7}|^1\d{10}/
                return regExp.test(str);
            };

3.2 E-mail檢索

    function isEmail(str){
                var regExp =  /^[a-zA-Z]\w*@[0-9a-zA-Z]+\.[a-zA-Z]+/;
                return regExp.test(str)
            };

3.3 密碼檢索

            function isValidPassword(str){
                //長(zhǎng)度6-20個(gè)字符,包括大寫(xiě)字母赴穗、小寫(xiě)字母憔四、數(shù)字、下劃線至少兩種
                if(/\W*/.test(str)){
                    return false
                }else if(/\w{0,5}|\w{21,}/.test(str)){
                    return false;
                }else if(/^\d+$|^[a-zA-Z]$|^_+$/.test(str)){
                    return false
                }else{
                    return true;
                }
            }

3.4 用戶(hù)名的檢索

            function isValidUsername(str){
                //長(zhǎng)度為6-20個(gè)字符般眉,只能包括字母數(shù)字和下劃線
                var regExp = /^\w{6,20}$/
                return regExp.test(str);
            };

3. 5 Url檢索

https://www.baidu.com:8080/index.html#q=hello

https://   ([a-zA-Z]*:\/\/)?
www.baidu.com   \S+
:8080   (:\d*)?
/   \/
index.html   \S*
#q=hello   (#.*)?

5. 小結(jié)

通過(guò)本文了赵,我們可以了解到:

  • 正則表達(dá)式可以理解為根據(jù)規(guī)定的規(guī)則,去檢索字符串然后根據(jù)匹配結(jié)果進(jìn)行后續(xù)的處理甸赃,處理可以包括判斷柿汛、獲取和替換;
  • 正則表達(dá)式的創(chuàng)建方法可以使用字面量和構(gòu)造函數(shù)形式埠对;兩種方法都是由正則模式和修飾符構(gòu)成络断,不同之處在于構(gòu)造函數(shù)需要以字符串形式傳參;
  • 修飾符規(guī)則部分可以傳遞三個(gè)參數(shù)项玛,分別為g貌笨、im,可以起到改變檢索規(guī)則的作用稍计;
  • 模式規(guī)則作為正則表達(dá)式躁绸,由普通字符和特殊字符構(gòu)成;
  • 普通字符包括打印字符和非打印字符;
  • 特殊字符即那些具有特殊含義的字符净刮,主要包括限定符剥哑、定位符類(lèi)型符淹父、分組符株婴、分組符條件符暑认、非獲取匹配符等困介;
  • 正則表達(dá)式以實(shí)例形式出現(xiàn)時(shí),擁有自己的屬性和方法蘸际,并且字符串的一些方法與正則表達(dá)式也存在密切的關(guān)系座哩;
  • 字符串的方法包括:matchreplace方法;
  • 正則實(shí)例的屬性和方法包括:ignonreCase粮彤、global根穷、multilinetestexec等导坟;
  • 最后給出了幾個(gè)正則表達(dá)式的應(yīng)用實(shí)例屿良,包括手機(jī)號(hào)碼、密碼惫周、用戶(hù)名尘惧、E-mail和URL檢索

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末递递,一起剝皮案震驚了整個(gè)濱河市喷橙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌漾狼,老刑警劉巖重慢,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異逊躁,居然都是意外死亡似踱,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)稽煤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)核芽,“玉大人,你說(shuō)我怎么就攤上這事酵熙≡颍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵匾二,是天一觀的道長(zhǎng)哮独。 經(jīng)常有香客問(wèn)我拳芙,道長(zhǎng),這世上最難降的妖魔是什么皮璧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任舟扎,我火速辦了婚禮,結(jié)果婚禮上悴务,老公的妹妹穿的比我還像新娘睹限。我一直安慰自己,他們只是感情好讯檐,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布羡疗。 她就那樣靜靜地躺著,像睡著了一般别洪。 火紅的嫁衣襯著肌膚如雪叨恨。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,736評(píng)論 1 312
  • 那天蕉拢,我揣著相機(jī)與錄音特碳,去河邊找鬼诚亚。 笑死晕换,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的站宗。 我是一名探鬼主播闸准,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼梢灭!你這毒婦竟也來(lái)了夷家?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤敏释,失蹤者是張志新(化名)和其女友劉穎库快,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體钥顽,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡义屏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜂大。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闽铐。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖奶浦,靈堂內(nèi)的尸體忽然破棺而出兄墅,到底是詐尸還是另有隱情,我是刑警寧澤澳叉,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布隙咸,位于F島的核電站沐悦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏五督。R本人自食惡果不足惜所踊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望概荷。 院中可真熱鬧秕岛,春花似錦、人聲如沸误证。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)愈捅。三九已至遏考,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蓝谨,已是汗流浹背灌具。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留譬巫,地道東北人咖楣。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像芦昔,于是被迫代替她去往敵國(guó)和親诱贿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理咕缎,服務(wù)發(fā)現(xiàn)珠十,斷路器,智...
    卡卡羅2017閱讀 134,716評(píng)論 18 139
  • 一凭豪、概述 正則表達(dá)式(regular expression)是一種表達(dá)字符串結(jié)構(gòu)的方法焙蹭,有點(diǎn)像字符串的模版,常常用...
    周花花啊閱讀 576評(píng)論 0 1
  • 第5章 引用類(lèi)型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類(lèi)型 使用基本類(lèi)型...
    大學(xué)一百閱讀 3,238評(píng)論 0 4
  • 秋天的雨滴 潤(rùn)濕了思念的眼睛 把你的世界 帶入夢(mèng)境 未知 向往 你在一個(gè)地方 用秋的落葉堆積成長(zhǎng)的種子 我在一個(gè)...
    彩彩的熊閱讀 332評(píng)論 4 2