歸納篇(二)正則表達(dá)式

假如不經(jīng)常寫正則表達(dá)式的話,真是學(xué)一遍忘一遍灭忠。自己再?gòu)?fù)習(xí)一遍正則表達(dá)式膳算。另外,歸納篇會(huì)持續(xù)更新文章更舞,但更新的目錄可能是跳躍式畦幢,因?yàn)橹饕俏易约翰槿毖a(bǔ)漏,參考梳理缆蝉,后面還會(huì)再開(kāi)一篇常用正則表達(dá)式匯總宇葱,自己寫一遍加深這些規(guī)則,以后項(xiàng)目中要是用到可以比較方便刊头。

正則表達(dá)式的定義

  • 正則表達(dá)式是一個(gè)描述字符模式的對(duì)象黍瞧。
  • ECMAScript中的RegExp類表示正則表達(dá)式。
  • 正則表達(dá)式用來(lái)驗(yàn)證客戶端的輸入數(shù)據(jù)原杂。

創(chuàng)建正則表達(dá)式

  1. 和創(chuàng)建字符串類似印颤,一種是new方式,一種是字面量方式
var pattern =new RegExp('pattern',‘gi’); //new方式穿肄,第一個(gè)參數(shù)是模式字符串年局,第二個(gè)可選參數(shù)是模式修飾符
var pattern2=/pattern2/ig; //字面量方式,模式修飾符i(忽略大小寫),g(全局匹配),m(多行匹配)

正則表達(dá)式的屬性和方法

  • 靜態(tài)屬性和實(shí)例屬性(都沒(méi)啥大用咸产,了解過(guò)下)
    • 靜態(tài)屬性 :input矢否、leftContext、rightContect脑溢、lastMatch僵朗、lastPattern、multiline
var pattern =/google/;
var str='This is a google!';
pattern.test(str);//必須執(zhí)行一下屑彻,靜態(tài)屬性才有效
alert(RegExp.input)   //當(dāng)前被匹配的字符串  
alert(RegExp.leftContext)   //當(dāng)前被匹配的字符串的前子串
alert(RegExp.rightContext)   //當(dāng)前被匹配的字符串的后子串
alert(RegExp.lastMatch) //google 最后一個(gè)被匹配的字符串
alert(RegExp.lastPattern)//  最后一對(duì)圓括號(hào)里匹配的字符串
alert(RegExp.multiline)// false  用于指定是否所有的表達(dá)式都用于多行的布爾值
  • 實(shí)例屬性:global验庙、ignoreCase、lastIndex社牲、multiline粪薛、source
  • 2個(gè)測(cè)試方法test()和exec();1個(gè)編譯方法compile()
    • test()在字符串中測(cè)試模式匹配,返回true和false;
    • exec() 在字符串中執(zhí)行匹配搜索搏恤,返回結(jié)果數(shù)組违寿,其中存放匹配的結(jié)果让禀;如果沒(méi)有匹配就返回null;
  • compile()編譯和改變后重新編譯正則表達(dá)式;
  • 使用字符串的正則表達(dá)式的4個(gè)方法:
  • match():返回pattern中 子串或null陨界;獲取匹配的數(shù)組
  • replace(pattern,replacement):返回替換后的字符串;
  • search():返回匹配字符串中開(kāi)始位置痛阻,找不到則返回-1
  • split():返回字符串指定匹配字符串拆分的數(shù)組
var pattern =/google/g;
var str='this google googlea googlea'; 
console.log(str.match(pattern));  //返回?cái)?shù)組["google", "google", "google"]
console.log(str.replace(pattern,'box'));  //開(kāi)啟全局菌瘪,全部替換,返回this box boxa boxa
console.log(str.search(pattern));  //返回位置5
console.log(str.split(pattern));  //返回?cái)?shù)組["this ", " ", "a ", "a"]

正則表達(dá)式的符號(hào)

  • 正則表達(dá)式由兩種基本字符類型組成:原義文本字符和元字符
  • 元字符是在正則表達(dá)式中含有特殊含義的非字母字符

\t //水平制表符
\v //垂直制表符
\n //換行符
\r //回車符
\0 //空字符
\f //換頁(yè)符
\cX //與X對(duì)應(yīng)的控制字符(Ctrl+x)

  • 字符類:
var pattern=/[abc]/ //泛指字符abc這一類的字符
var pattern=/[^abc]/ //^創(chuàng)建反向類/負(fù)向類阱当,不屬于某類的內(nèi)容俏扩。表示不是a或b或c的內(nèi)
  • 范圍類
'assklja1223'.replace(/[a-z]/g,'7'); // 得到"77777771223"。[a-z]表示26個(gè)小寫字母a-z弊添,也可以連寫[a-zA-Z]
'as-sk-lja-122-3'.replace(/[a-z-]/g,'Q'); //得到"QQQQQQQQQQ122Q3"录淡。要匹配連字符-就直接加在里面[a-z-]
  • js預(yù)定義類及邊界

. //除了回車符和換行符之外的所有字符
\d //數(shù)字字符
\D //非數(shù)字字符
\s //空白符
\S //非空白符
\w //單詞字符(字母數(shù)字下劃線)
\W //非單詞字符
^ //以什么開(kāi)始,只有在[]里面^表示取反
$ //以什么結(jié)束
\b //單詞邊界
\B //非單詞邊界

  • 量詞
    • 匹配連續(xù)出現(xiàn)多次
      ?//出現(xiàn)0次或1次
      + //至少出現(xiàn)1次
      * //出現(xiàn)任意次
      {n} //出現(xiàn)n次
      {n,m} //出現(xiàn)n到m
      {n,} //至少出現(xiàn)n次
  • js正則貪婪模式和非貪婪模式
    • 正則表達(dá)式默認(rèn)會(huì)盡可能多的去匹配
      '12345678'.replace(/\d{3,6}/g,'S') //得出'S78'
    • 讓正則表達(dá)式盡可能少的匹配油坝,一旦匹配成功不再繼續(xù)嘗試匹配就是非貪婪模式嫉戚。做法就是在量詞后面加上?
      '123456789'.match(/\d{3,5}?/g) //得出["123", "456", "789"]
  • 分組
    • 使用()可以達(dá)到使量詞作用于分組
      'a1b2c3d4'.replace(/([a-z]\d){2}/g,'Ac') //得到"AcAc"
    • 或 (使用 | 可以達(dá)到或的效果)
      'carrfcaggty'.replace(/ca(rr|gg)/g,'BB') //得到'BBfBBty'
    • 反向引用
      //2015-12-25=>12/25/2015
      //只有在分組里澈圈,$1$2$3捕獲分組
      '2015-12-25'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1');
      //如果不希望某些分組被捕獲彬檀,只要在分組內(nèi)加上?:就可以
  • 前瞻
    • 正則表達(dá)式從文本頭部像文本尾部開(kāi)始解析瞬女,文本尾部方向窍帝,稱為“前”。
    • 前瞻就是在正則表達(dá)式匹配到規(guī)則的時(shí)候诽偷,向前檢查是否符合斷言坤学;后顧/后瞻方向相反
    • JavaScript不支持后顧
    • 符合和不符合特定斷言稱為肯定/正向匹配和否定/負(fù)向匹配
    •  'a2*3'.replace(/\w(?=\d)/g,'x')  //得出"x2*3"。
        //正向前瞻exp(?=assert)
        //負(fù)向前瞻exp(?!=assert)
        //前面是一個(gè)正則报慕,后面是一個(gè)斷言規(guī)則
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末深浮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子卖子,更是在濱河造成了極大的恐慌略号,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洋闽,死亡現(xiàn)場(chǎng)離奇詭異玄柠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)诫舅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門羽利,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人刊懈,你說(shuō)我怎么就攤上這事这弧⊥尴校” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵匾浪,是天一觀的道長(zhǎng)皇帮。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蛋辈,這世上最難降的妖魔是什么属拾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮冷溶,結(jié)果婚禮上渐白,老公的妹妹穿的比我還像新娘。我一直安慰自己逞频,他們只是感情好纯衍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著苗胀,像睡著了一般襟诸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上基协,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天励堡,我揣著相機(jī)與錄音,去河邊找鬼堡掏。 笑死应结,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的泉唁。 我是一名探鬼主播鹅龄,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼亭畜!你這毒婦竟也來(lái)了扮休?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拴鸵,失蹤者是張志新(化名)和其女友劉穎玷坠,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體劲藐,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡八堡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了聘芜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兄渺。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖汰现,靈堂內(nèi)的尸體忽然破棺而出挂谍,到底是詐尸還是另有隱情叔壤,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布口叙,位于F島的核電站炼绘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏妄田。R本人自食惡果不足惜饭望,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望形庭。 院中可真熱鬧,春花似錦厌漂、人聲如沸萨醒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)富纸。三九已至,卻和暖如春旨椒,著一層夾襖步出監(jiān)牢的瞬間晓褪,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工综慎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涣仿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓示惊,卻偏偏與公主長(zhǎng)得像好港,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子米罚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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