JS—正則表達(dá)式(b)

正則表達(dá)式的元字符是包含特殊含義的字符胞谈,它們有一些特殊的功能呜魄,可以控制匹配模式的方式,反斜杠后的元字符失去其特殊含義。

  • 單個字符和數(shù)字

  • .表示匹配除換行符外的單個字符笨蚁,兩個.就表示匹配兩個字符
    var pattern1=/g.gle/;
    alert(pattern1.test('gogle'))//true
    alert(pattern1.test('g\ngle'))//換行符false
    alert(pattern1.test('ggle'))//沒有匹配false
    var pattern2=/g..gle/;
    alert(pattern2.test('google'))//true
    alert(pattern2.test('gooogle'))//false

  • [a-z0-9A-Z]

    • [a-z] 表示26個小寫字母任意一個都匹配
      var pattern1=/[a-z]oogle/;
      alert(pattern1.test('hoogle'))//true
      alert(pattern1.test('google'))//true
    • [A-Z] 表示26個大寫字母任意一個都匹配
      var pattern1=/[A-Z]oogle/;
      alert(pattern1.test('Aoogle'))//true
      alert(pattern1.test('google'))//false
    • [0-9] 表示0-9任意一個數(shù)字都匹配
      var pattern1=/[0-9]oogle/;
      alert(pattern1.test('000000oogle'))//true
      alert(pattern1.test('google'))//flase
    • [a-zA-Z0-9] 表示匹配任意字母與數(shù)字
      var pattern1=/[a-zA-Z0-9]oogle/;
      alert(pattern1.test('0oogle'))//true
      alert(pattern1.test('google'))//true
      alert(pattern1.test('Foogle'))//true
      【結(jié)合重復(fù)字符使用】表示可以匹配任意多個字符
      var pattern1=/[0-9]*oogle/;
      alert(pattern1.test('oogle'))//true
      alert(pattern1.test('00000google'))//true
  • [^a-z]表示取非伪很,任意非小寫字母
    var pattern1=/[^a-z]oogle/;
    alert(pattern1.test('0oogle'))//true
    alert(pattern1.test('google'))//flase
    alert(pattern1.test('Foogle'))//true
    當(dāng)然也可以是任意非大寫字母奋单,非數(shù)字,非~

  • \w小寫表示匹配字母數(shù)字及_
    var pattern1=/[a-zA-Z0-9_]oogle/;//可以被后者取代
    var pattern2=/\woogle/;
    alert(pattern2.test('_oogle'))//true
    alert(pattern2.test('.oogle'))//false

  • \W大寫是小寫的否定即呆盖,表示匹配任意非數(shù)字字母下劃線

  • \d匹配數(shù)字
    var pattern1=/[0-9]oogle/;
    var pattern2=/\doogle/;
    alert(pattern2.test('2oogle'))//true
    alert(pattern2.test('.oogle'))//false

  • \D大寫取非咯

  • 空白字符

  • \s表示空白匹配
    var pattern1=/goo\sgle/;
    alert(pattern1.test('goo gle'))//true

  • 錨字符

  • ^[]放在中括號外面哦应又,表示限制中括號內(nèi)的內(nèi)容出現(xiàn)在字符串的開始,

  • []$表示限制中括號的內(nèi)容尤筐,或緊鄰其的一個字符需要出現(xiàn)在字符串的結(jié)尾
    var pattern1=/^google$/;
    alert(pattern1.test('google'))//true
    var pattern2=/^google/;
    alert(pattern2.test('googleeeeee'))//true
    var pattern3=/google$/;
    alert(pattern3.test('gggggoogle'))//true
    var pattern1=/^google[0-9]$/;
    alert(pattern1.test('google7777'))//false
    alert(pattern1.test('google7'))//true

  • \b表示是否達(dá)到邊界
    var pattern1=/google\b/;
    alert(pattern1.test('google'))//true
    var pattern1=/google\b/;
    alert(pattern1.test('googlee'))//flase

  • 重復(fù)字符

  • *表示匹配0個或任意多個前面的字符
    var pattern1=/go
    gle/;
    alert(pattern1.test('ggle'))//true
    alert(pattern1.test('gogle'))//true
    alert(pattern1.test('gooogle'))//true

  • +表示匹配1個或多個+前面的字符
    var pattern1=/go+gle/;
    alert(pattern1.test('ggle'))//false
    alert(pattern1.test('gogle'))//true
    alert(pattern1.test('gooogle'))//true

  • 盆繁?表示匹配0個或一個旬蟋?前面的字符
    var pattern1=/go?gle/;
    alert(pattern1.test('ggle'))//true
    alert(pattern1.test('gogle'))//true
    alert(pattern1.test('gooogle'))//false
    這個是表示對任意字符的重復(fù)限制咖为。
    var pattern1=/g.?gle/;
    alert(pattern1.test('ggle'))//true
    alert(pattern1.test('gbgle'))//true

  • {m,n}匹配m~n個包括m與n個
    var pattern1=/go{2,4}gle/;
    alert(pattern1.test('gooooogle'))//false
    alert(pattern1.test('google'))//true
    表示只匹配限定個數(shù)個
    var pattern1=/go{2}gle/;
    alert(pattern1.test('gooooogle'))//false
    alert(pattern1.test('google'))//true
    表示至少匹配某個
    var pattern1=/go{2,}gle/;
    alert(pattern1.test('gooooogle'))//true
    alert(pattern1.test('google'))//true

  • ()+匹配至少一個模式
    var pattern1=/(google)+/;//對google這個字符串進(jìn)行重復(fù)匹配
    alert(pattern1.test('googlegooglegoogle'))//true

  • 或字符
    或模式匹配
    var pattern1=/google|baidu|bing/;//或模式匹配
    alert(pattern1.test('this is baidu'))//true
    alert(pattern1.test('soso'))//false

  • 替代字符
    var pattern1=/(.)\s(.)/;//替換
    var str='google baidu';
    alert(str.replace(pattern1,'$2 $1'));//baidu google
    var pattern1=/8(.*)8/;//獲取88之間的任意字符
    var str='this is 8google8';
    document.write(str.replace(pattern1,'<strong>$1</strong>'))

  • 記錄字符

    • 分組
      var pattern1=/(google){2,4}/;//對google這個字符串進(jìn)行重復(fù)匹配
      alert(pattern1.test('googlegooglegoogle'))//true
      alert(pattern1.test('google'))//flase
    • 捕獲分組
      var pattern1=/8(.*)8/;//獲取88之間的任意字符
      alert(pattern1.test('this is 8google8'))//true
      alert(RegExp.$1);//google表示獲取模式中第一個分組對應(yīng)的匹配的字符串躁染,必須得運行過。

貪婪與惰性

  • 貪婪模式
    var pattern=/8(.*)8/;// 使用了貪婪我衬,匹配到了google8 8google8 8google
    var str='8google8 8google8 8google8';
    document.write(str.replace(pattern,'<strong>$1</strong>'))
  • 惰性模式
    var pattern=/8(.?)8/g;//惰性模式挠羔,全部匹配
    var str='8google8 8google8 8google8';
    document.write(str.replace(pattern,'<strong>$1</strong>'))
    后面多加一個埋嵌?表示取消貪婪模式,進(jìn)行惰性模式范舀,只進(jìn)行匹配一個了罪。
    下面這個是沒有采用惰性模式,只是將匹配的結(jié)果中除去了8
    var pattern=/8([^8]*)8/g;//惰性模式辅辩,全部匹配
    var str='8google8 8google8 8google8';
    document.write(str.replace(pattern,'<strong>$1</strong>'))

  • 捕獲與非捕獲
    未添加分組時:.exec只返回當(dāng)前位置匹配的字符串
    var pattern=/[a-z]\s\d{4}/;
    var str='google 2015';
    alert(pattern.exec(str));//google 2015
    添加分組后玫锋,該分組內(nèi)容被捕獲,并賦給exec所返回的數(shù)組
    var pattern=/([a-z]
    )\s(\d{4})/;
    var str='google 2015';
    alert(pattern.exec(str));//google 2015,goole,2015
    非捕獲即取消分組被捕獲(?:)通過在分組前加上問號與冒號臀稚,便可以取消捕獲該分組三痰。
    var pattern=/([a-z]*)\s(?:\d{4})/;
    var str='google 2015';
    alert(pattern.exec(str));//google 2015,goole

  • 分組嵌套
    嵌套分組需要從外往內(nèi)獲取
    var pattern=/(a?(b?(c?)))/;
    var str='abc';
    alert(pattern.exec(str));//abc,abc,bc,c
    第一步:獲得匹配字符串:abc
    第二步:獲得第一個分組,即最外層:abc
    第三步:獲得第二個分組稚机,bc
    第四步:獲得最內(nèi)層分組c

  • 使用前瞻捕獲
    var pattern=/goo(?=gle)/;
    var str='google';
    alert(pattern.exec(str));//goo
    在正則匹配的字符串之后添加一對()获搏,該括號內(nèi)定義了匹配條件常熙,只有當(dāng)滿足條件時,才可以進(jìn)行匹配仿贬。注意該例子的最后匹配值為goo墓贿。

  • 使用特殊字符匹配
    var pattern=/[/;
    var str='[';
    alert(pattern.test(str));//true
    對于要匹配特殊最的情況,需要在其前加上斜杠队伟,來標(biāo)識幽勒。

  • 換行模式
    var pattern=/\d+/g;
    var str='1啥容、abc\n2、edf';
    alert(str.replace(pattern,'#'));//完全匹配,并替換

      var pattern=/^\d+/g;
      var str='1、abc\n2泼返、edf';
      alert(str.replace(pattern,'#'));//匹配第一個
      
      var pattern=/^\d+/gm;
      var str='1、abc\n2渠鸽、edf';
      alert(str.replace(pattern,'#'));//完全匹配,并替換
    

當(dāng)字符串內(nèi)出現(xiàn)換行符時徽缚,如果我們不進(jìn)行錨字符的使用,那么會匹配全局排宰,包括換行后的那婉。
但是,由于使用錨字符盐类,導(dǎo)致即使使用了全局呛谜,也沒有辦法匹配換行后的結(jié)果隐岛,此時需要開啟換行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吐咳,一起剝皮案震驚了整個濱河市元践,隨后出現(xiàn)的幾起案子单旁,更是在濱河造成了極大的恐慌,老刑警劉巖蔫饰,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篓吁,死亡現(xiàn)場離奇詭異蚪拦,居然都是意外死亡冻押,警方通過查閱死者的電腦和手機(jī)洛巢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門次兆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芥炭,“玉大人,你說我怎么就攤上這事米苹∨樽粒” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挚冤。 經(jīng)常有香客問我训挡,道長,這世上最難降的妖魔是什么澜薄? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任肤京,我火速辦了婚禮颊艳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忘分。我一直安慰自己棋枕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布妒峦。 她就那樣靜靜地躺著重斑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肯骇。 梳的紋絲不亂的頭發(fā)上绸狐,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天卤恳,我揣著相機(jī)與錄音,去河邊找鬼。 笑死若债,一個胖子當(dāng)著我的面吹牛符相,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蠢琳,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼啊终,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了傲须?” 一聲冷哼從身側(cè)響起蓝牲,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泰讽,沒想到半個月后例衍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡已卸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年佛玄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片累澡。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡梦抢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出愧哟,到底是詐尸還是另有隱情奥吩,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布蕊梧,位于F島的核電站霞赫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏望几。R本人自食惡果不足惜绩脆,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望橄抹。 院中可真熱鬧靴迫,春花似錦、人聲如沸楼誓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疟羹。三九已至主守,卻和暖如春禀倔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背参淫。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工救湖, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涎才。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓鞋既,卻偏偏與公主長得像,于是被迫代替她去往敵國和親耍铜。 傳聞我的和親對象是個殘疾皇子邑闺,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

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

  • 什么是正則表達(dá)式?如何創(chuàng)建正則表達(dá)式正則表達(dá)式常用的方法字符串中的正則表達(dá)式常用的正則表達(dá)式假設(shè)用戶需要在HTML...
    greenlift閱讀 805評論 0 0
  • 正則表達(dá)式是一個描述字符模式的對象棕兼,ECMAScript的RegExp類表示正則表達(dá)式陡舅。String與RegExp...
    Miss____Du閱讀 794評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)伴挚,斷路器靶衍,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • RegExp 三大方法本文的RegExp采用直接量語法表示:/pattern/attributes。attribu...
    恩德_b0c2閱讀 455評論 0 0
  • 我是一只小小鳥章鲤,想要飛卻飛不高摊灭。 我是一個大肚子,想要減卻減不掉败徊。
    畫癡NOV閱讀 300評論 0 1