js正則表達(dá)式教程示例

正則表達(dá)式是項(xiàng)目開發(fā)中常用的模式,內(nèi)容替換扒吁、表單認(rèn)證稳摄、網(wǎng)絡(luò)爬蟲等,通過以下的例子我相信可以大概掌握正則表達(dá)式了

定義字符集 []

  • [a-e]表示a到e這些字符中的某一個(gè)字符

  • [a-z]26個(gè)字母之一

  • [aeiou]表示aeiou這5個(gè)字符其中的某一個(gè)字符

  • [a-zA-Z]表示大寫泼橘、小寫字母中的某一個(gè)字符

  • [a-zA-Z0-9_-]表示大寫涝动、小寫字母、0-9炬灭、_醋粟、-中的某一個(gè)字符

  • [0-9]表示0到9之間的任意一個(gè)數(shù)字

  • [9-3] [z-a]不能從大往小寫,有語法錯(cuò)誤

     <script type="text/javascript">
         //定義字符集
         //在沒有特殊限制的時(shí)候就是“單次”匹配
         //從左往右匹配到第一符合模式的內(nèi)容即可
    
         var str = "2015-09-12 is a SunShine Day";
         var reg = /[a-z]/;   //["i"]
         var reg = /[M-W]/;   //["S"]
         var reg = /[uxpq]/;  //["u"]
         var reg = /[0-9]/;   //["2"]
         var reg = /[a-z_-]/; //["-"]
         var rst = str.match(reg);
         console.log(rst);
         
     </script>
    

特別字符集

  • $:匹配輸入字符串的結(jié)尾位置

  • ^(托字符):表示字符串的開始位置重归,或者表示非

  • ():標(biāo)記一個(gè)字表達(dá)式的開始和結(jié)束位置

  • :其前面那個(gè)單元出現(xiàn)0次或以上(任意次數(shù))*

  • +:其前面那個(gè)單元出現(xiàn)1次或以上

  • ?:其前面那個(gè)單元出現(xiàn)0次或者1次

  • .點(diǎn):匹配除換行符\n之外的任何單字符

  • \:用來轉(zhuǎn)義的符號

  • |:表示兩個(gè)之間的一個(gè)選擇米愿,或

     <script type="text/javascript">
         //特別字符集
    
         //*  ?  +
         var str = "2018-03-01 is a SunShine Day";
         var reg = /[0-9]+/;   //["2018"]
         
         var str = "gooogle";
         var reg = /go+gle/; //["gooogle"]
    
         var str = "ggle";
         var reg = /go*gle/; //["ggle"]
         
         var str = "hellow 0 javascript";
         var reg = /[0-9]+/; //["0"]
         var reg = /[0-9]*/; //[""]匹配空的字符串,因?yàn)殚_始的時(shí)候就出現(xiàn)了0次鼻吮,"沒有"
         var reg = /loe?w/; //["low"]
         
         var rst = str.match(reg);
         console.log(rst);
         
         //.點(diǎn)  \  |
         var str = "svovk(dsf?>?*&{})!^\n}PPoo*&?";
         var reg = /.*/; //["svovk(dsf?>?*&{})!^"]
         
         var str = "xiaoming like eat apple";
         var reg = /banana|apple/; //["apple"]
         
         var str = '<div class="box">the box</div>';
         var reg = /<div class=\"box\">the .*<\/div>/; //["<div class="box">the box</div>"]轉(zhuǎn)義在正則中有特殊含義的字符育苟,例如| / . ? + 等
         var rst = str.match(reg);
         console.log(rst);
         
         
         //^和$符號
         var str = "php is the best language";
         var reg = /[language]/; //["language"]
         var reg = /[^language]/; //null 'language'在字符串的開始位置沒有出現(xiàn)
         var reg = /[^php]/; //["php"]
         
         var reg = /[languag$]/; //null 'languag'在字符串的結(jié)尾位置沒有出現(xiàn)
         var reg = /language$/; //["language"]
         
         //^和$兩符號要出現(xiàn)在每個(gè)正常的正則表達(dá)式里邊
    

    //作用:可以“完整”地匹配輸入字符串的信息
    //手機(jī)號碼驗(yàn)證:13開始,后續(xù)有9位數(shù)字狈网,不能添加其余內(nèi)容
    var str = "13250185056";
    var reg = /^13[0-9]{9}$/;//{m}前面單元嚴(yán)格出現(xiàn)m次
    var rst = str.match(reg);
    console.log(rst);

        //()小闊號
        //作用:
        //提高字表達(dá)式優(yōu)先級
        //從一個(gè)大的字符串中拆分小的字符串出來
        var str = "gogle";
        var reg = /(go)+(gle)/;
        
        //rst[0] = "gogle";成功匹配的字符串
        //rst[1] = "go";第一個(gè)()里面匹配成功的字符串宙搬,不成功為undefined
        //rst[2] = "gle"第二個(gè)()里面匹配成功的字符串笨腥,不成功為undefined
        
        //提取html里面的關(guān)鍵內(nèi)容
        var str = '<div id="today" class="tqingtoday"><h3 style="padding-bottom:0px;">北京</h3><ul><li class="tqpng_01"><li class="sd">晴</li><li class="font_05">';
        var reg = /<h3.*>(.*)<\/h3>/;
        var rst = str.match(reg);
        console.log(rst[0]);//"<h3 style="padding-bottom:0px;">北京</h3>"
        console.log(rst[1]);//"北京"拓哺,成功提取出北京
    </script>
  • ()小括號使用擴(kuò)展

     <script type="text/javascript">
         //小括號模式單元 重復(fù)使用
    
         var str = "2018-09-09 09:09:09";
         //匹配到的時(shí)間特點(diǎn):月份、日期脖母、時(shí)士鸥、分、秒都一致
         var reg = /[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+/; // ["2018-09-09 09:09:09"]
         //通過“\1”重復(fù)匹配前面第一個(gè)小括號模式單元內(nèi)容
         var reg = /[0-9]+-([0-9]+)-\1 \1:\1:\1/; // ["2018-09-09 09:09:09","09"]
         //通過“\2”重復(fù)匹配前面第二個(gè)小括號模式單元內(nèi)容
         var reg = /([0-9]+)-([0-9]+)-\2 \2:\2:\2/; //["2018-09-09 09:09:09","2018","09"]
         
         var str = "2018:11 2018&11";
         var reg = /([0-9]+):([0-9]+) \1&\2/; //["2018:11 2018&11","2018","11"]
         
         //\m模式單元重復(fù)使用 與 {m}谆级、+烤礁、*的區(qū)別:
         //1讼积、\m\m\m\m 限制前面單元出現(xiàn)多次
         //   重復(fù)匹配前面第m個(gè)小括號內(nèi)容
         //   要求 匹配內(nèi)容與被匹配內(nèi)容的“大小和數(shù)據(jù)類型”都一致
         //2、{m}脚仔、+勤众、*限制前面單元出現(xiàn)多次,出現(xiàn)的內(nèi)容只要保證“數(shù)據(jù)類型”一致即可
         
         var str1 = "2018-03-03-03-03-03";
         var str2 = "2018-03-12-15-23-57";
         
         var reg = /[0-9]+(-[0-9]+)\1\1\1\1/; //["2018-03-03-03-03-03","-03"] null(str2匹配不成功)
         
         var reg = /[0-9]+(-[0-9]+){5}/; //["2018-03-03-03-03-03","-03"] ["2018-03-03-03-03-03","-57"]
         
         //{5}鲤脏、+们颜、* 匹配以上兩個(gè)str效果一樣
         
         
         var rst = str.match(reg);
         console.log(rst);
         
     </script>
    

模式修正符

var 模式名稱 = /模式內(nèi)容/模式修正符;

  • i:忽略大小寫

  • g:全局匹配(進(jìn)行全局匹配的時(shí)候不給體現(xiàn)"模式單元"內(nèi)容,默認(rèn)是單次匹配猎醇,非全局)

     <script type="text/javascript">
         //模式修正符
    
         var str = "Beijing2008Guangzhou2010Shanghai2012";
         var reg = /[a-z]+([0-9]+)/ig;
         var rst = str.match(reg);
         console.log(rst);
         //["Beijing2008","Guangzhou2010","Shanghai2012"]窥突,沒有index和input屬性,不獲取()里面的內(nèi)容
         
     </script>
    

組合字符集

  • \d:表示數(shù)字[0-9]

  • \D:表示非數(shù)字[^0-9]

  • \w:表示字母硫嘶、數(shù)字阻问、下劃線中其中一個(gè)[a-zA-Z0-9_]

  • \W:非字母、數(shù)字沦疾、下劃線[^a-zA-Z0-9_]

  • \s:表示空格

  • \S:表示非空格

     <script type="text/javascript">
         //組合字符集
         //\d:表示數(shù)字[0-9] \D:表示非數(shù)字[^0-9]
         var str = "2018/03/01";
         var reg = /\d+/; //["2018"]
         var reg = /\D/g; //["/","/"]
         var reg = /[^0-3]+/; //["8/"]
         
         //\w:表示字母称近、數(shù)字、下劃線中其中一個(gè)[a-zA-Z0-9_] \W:非字母哮塞、數(shù)字煌茬、下劃線[^a-zA-Z0-9_]
         var str = "asdas326_JIO@jiaying.yang";
         var reg = /\w+/; //["asdas326_JIO"]
         var reg = /\W/g; //["@","."]
         
         //s:表示空格 \S:表示非空格
         var str = "hellow      guangzhou";
         var reg = /[a-z]+\s\s\s\s\s\s[a-z]+/; //["hellow      guangzhou"]       
    
         var rst = str.match(reg);
         console.log(rst);
         
     </script>
    

限制字符集

  • {m}:前面單元出現(xiàn)m次
  • {m,}:前面單元至少出現(xiàn)m次,至多不限制
  • {m,n}:前面單元出現(xiàn)至少m次彻桃,至多n次
  • [^lsdf]:不是中括號中的任意一個(gè)字符
  • [^a-f]:不是中括號中范圍的任意一個(gè)字符
  • var reg = /^apple/; 匹配內(nèi)容開始有apple字樣
  • var reg = /[^a-h]/; 不匹配a-h之間的字母

正向反向匹配

  • 正向匹配:我們要查找出來的內(nèi)容坛善,右邊必須出現(xiàn)指定的信息,并且其是輔助條件邻眷,不是結(jié)果的一部分眠屎。
    var reg = /pattern(?=模式)/;

  • 正向不匹配:我們要查找出來的內(nèi)容,右邊不能出現(xiàn)指定的信息肆饶,右邊的信息是輔助條件改衩,非結(jié)果部分。
    var reg = /pattern(?!模式)/;
    例如:

     <script type="text/javascript">
         //正向匹配:小寫字母字符串右邊要出現(xiàn)連續(xù)數(shù)字信息
         
         var str1 = "javascript2018";
         var str2 = "javascript@2018";
         var reg = /[a-z]+(?=\d+)/; //["javascript"] 不匹配模式里面的內(nèi)容  null沒有在右邊出現(xiàn)連續(xù)數(shù)字
         
         var str = "https://www.bmob.cn/shop/index.php?price=50&platform=0&type=2"
         //通過正向匹配獲取參數(shù)名稱 price驯镊、platform葫督、type
         var reg = /[a-z]+(?==)/g; //["price","platform","type"]
         
         
         //正向不匹配:右邊不能出現(xiàn)連續(xù)數(shù)字信息
         var str1 = "todayABC254";
         var str2 = "today123";
         var reg = /[a-z]+(?!\d+)/; //["today"] 不匹配模式里面的內(nèi)容  null在右邊出現(xiàn)了連續(xù)數(shù)字
         
         
         var rst = str.match(reg);
         console.log(rst);
         
     </script>
    
  • 反向匹配:左邊必須出現(xiàn)指定信息
    var reg = /(?<=模式)pattern/;

  • 反向不匹配:左邊不能出現(xiàn)指定信息
    var reg = /(?<!模式)pattern/;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市板惑,隨后出現(xiàn)的幾起案子橄镜,更是在濱河造成了極大的恐慌,老刑警劉巖冯乘,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洽胶,死亡現(xiàn)場離奇詭異,居然都是意外死亡裆馒,警方通過查閱死者的電腦和手機(jī)姊氓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門丐怯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翔横,你說我怎么就攤上這事读跷。” “怎么了禾唁?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵舔亭,是天一觀的道長。 經(jīng)常有香客問我蟀俊,道長钦铺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任肢预,我火速辦了婚禮矛洞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烫映。我一直安慰自己沼本,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布锭沟。 她就那樣靜靜地躺著抽兆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪族淮。 梳的紋絲不亂的頭發(fā)上辫红,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音祝辣,去河邊找鬼贴妻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蝙斜,可吹牛的內(nèi)容都是我干的名惩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼孕荠,長吁一口氣:“原來是場噩夢啊……” “哼娩鹉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起稚伍,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤弯予,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后槐瑞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熙涤,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年困檩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祠挫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悼沿,死狀恐怖等舔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情糟趾,我是刑警寧澤慌植,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站义郑,受9級特大地震影響蝶柿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜非驮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一交汤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧劫笙,春花似錦芙扎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至允华,卻和暖如春圈浇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背靴寂。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工汉额, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人榨汤。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓蠕搜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親收壕。 傳聞我的和親對象是個(gè)殘疾皇子妓灌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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