js正則表達式教程示例

正則表達式是項目開發中常用的模式,內容替換、表單認證、網絡爬蟲等,通過以下的例子我相信可以大概掌握正則表達式了

定義字符集 []

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

  • [a-z]26個字母之一

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

  • [a-zA-Z]表示大寫、小寫字母中的某一個字符

  • [a-zA-Z0-9_-]表示大寫、小寫字母、0-9、_、-中的某一個字符

  • [0-9]表示0到9之間的任意一個數字

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

     <script type="text/javascript">
         //定義字符集
         //在沒有特殊限制的時候就是“單次”匹配
         //從左往右匹配到第一符合模式的內容即可
    
         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>
    

特別字符集

  • $:匹配輸入字符串的結尾位置

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

  • ():標記一個字表達式的開始和結束位置

  • :其前面那個單元出現0次或以上(任意次數)*

  • +:其前面那個單元出現1次或以上

  • ?:其前面那個單元出現0次或者1次

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

  • \:用來轉義的符號

  • |:表示兩個之間的一個選擇,或

     <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]*/; //[""]匹配空的字符串,因為開始的時候就出現了0次,"沒有"
         var reg = /loe?w/; //["low"]
         
         var rst = str.match(reg);
         console.log(rst);
         
         //.點  \  |
         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>"]轉義在正則中有特殊含義的字符,例如| / . ? + 等
         var rst = str.match(reg);
         console.log(rst);
         
         
         //^和$符號
         var str = "php is the best language";
         var reg = /[language]/; //["language"]
         var reg = /[^language]/; //null 'language'在字符串的開始位置沒有出現
         var reg = /[^php]/; //["php"]
         
         var reg = /[languag$]/; //null 'languag'在字符串的結尾位置沒有出現
         var reg = /language$/; //["language"]
         
         //^和$兩符號要出現在每個正常的正則表達式里邊
    

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

        //()小闊號
        //作用:
        //提高字表達式優先級
        //從一個大的字符串中拆分小的字符串出來
        var str = "gogle";
        var reg = /(go)+(gle)/;
        
        //rst[0] = "gogle";成功匹配的字符串
        //rst[1] = "go";第一個()里面匹配成功的字符串,不成功為undefined
        //rst[2] = "gle"第二個()里面匹配成功的字符串,不成功為undefined
        
        //提取html里面的關鍵內容
        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>
  • ()小括號使用擴展

     <script type="text/javascript">
         //小括號模式單元 重復使用
    
         var str = "2018-09-09 09:09:09";
         //匹配到的時間特點:月份、日期、時、分、秒都一致
         var reg = /[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+/; // ["2018-09-09 09:09:09"]
         //通過“\1”重復匹配前面第一個小括號模式單元內容
         var reg = /[0-9]+-([0-9]+)-\1 \1:\1:\1/; // ["2018-09-09 09:09:09","09"]
         //通過“\2”重復匹配前面第二個小括號模式單元內容
         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模式單元重復使用 與 {m}、+、*的區別:
         //1、\m\m\m\m 限制前面單元出現多次
         //   重復匹配前面第m個小括號內容
         //   要求 匹配內容與被匹配內容的“大小和數據類型”都一致
         //2、{m}、+、*限制前面單元出現多次,出現的內容只要保證“數據類型”一致即可
         
         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}、+、* 匹配以上兩個str效果一樣
         
         
         var rst = str.match(reg);
         console.log(rst);
         
     </script>
    

模式修正符

var 模式名稱 = /模式內容/模式修正符;

  • i:忽略大小寫

  • g:全局匹配(進行全局匹配的時候不給體現"模式單元"內容,默認是單次匹配,非全局)

     <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屬性,不獲取()里面的內容
         
     </script>
    

組合字符集

  • \d:表示數字[0-9]

  • \D:表示非數字[^0-9]

  • \w:表示字母、數字、下劃線中其中一個[a-zA-Z0-9_]

  • \W:非字母、數字、下劃線[^a-zA-Z0-9_]

  • \s:表示空格

  • \S:表示非空格

     <script type="text/javascript">
         //組合字符集
         //\d:表示數字[0-9] \D:表示非數字[^0-9]
         var str = "2018/03/01";
         var reg = /\d+/; //["2018"]
         var reg = /\D/g; //["/","/"]
         var reg = /[^0-3]+/; //["8/"]
         
         //\w:表示字母、數字、下劃線中其中一個[a-zA-Z0-9_] \W:非字母、數字、下劃線[^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}:前面單元出現m次
  • {m,}:前面單元至少出現m次,至多不限制
  • {m,n}:前面單元出現至少m次,至多n次
  • [^lsdf]:不是中括號中的任意一個字符
  • [^a-f]:不是中括號中范圍的任意一個字符
  • var reg = /^apple/; 匹配內容開始有apple字樣
  • var reg = /[^a-h]/; 不匹配a-h之間的字母

正向反向匹配

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

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

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

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內容