亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Regex > 正文

超全的js正則表達式整理筆記

2020-03-16 21:01:44
字體:
來源:轉載
供稿:網友
這篇文章為大家分享了一篇超全的javascript正則表達式整理筆記,感興趣的小伙伴們可以參考一下
 

 

var reCat = new RegExp("cat", "gi"); //RegExp構造函數可以帶一個或兩個參數,第一個參數描述需要進行匹配的模式字符串,第二個參數指定了額外的處理命令 var reCat = /cat/gi; //使用Perl風格的語法   i:執行對大小寫不敏感的匹配  g:執行全局匹配(查找所有匹配而非在找到第一個匹配后停止)  m:執行多行匹配 

元字符  

元字符是表達式語法的一部分,在正則表達式中用到的所有元字符有:{ [ ( / ^ $ | ) ] } ? * + -  
如匹配一個問號:var reQMark = //?/; 或 var reQMark = new RegExp("//?"); //注意這里是兩個反斜杠,雙重轉義  

/xxx 查找以八進制數 xxx 規定的字符,如://142/為字符b /xdd 查找以十六進制數 dd 規定的字符,如://x62/為字符b /uxxxx 查找以十六進制數 xxxx 規定的 Unicode 字符,如://u0062/為字符b /r 查找回車符 /n 查找換行符 /f 查找換頁符 /t 查找制表符 /v 查找垂直制表符 /a 查找alert字符 /e 查找escape字符 /cX 查找與X相對應的控制字符 /0 查找 NULL 字符  . 查找單個字符,除了換行和行結束符,等同于[^/n/r] /w 查找單詞字符,等同于[a-zA-Z_0-9] /W 查找非單詞字符,等同于[^a-zA-Z_0-9] /d 查找數字,等同于[0-9] /D 查找非數字字符,等同于[^0-9] /s 查找空白字符,等同于[ /t/n/x0B/f/r],/x0B為垂直tab和/t一樣 /S 查找非空白字符,等同于[^ /t/n/x0B/f/r] 

方括號  

[abc] 查找方括號之間的任何字符 [^abc] 查找任何不在方括號之間的字符 [0-9] 查找任何從 0 至 9 的數字 [a-z] 查找任何從小寫 a 到小寫 z 的字符 [A-Z] 查找任何從大寫 A 到大寫 Z 的字符 [A-z] 查找任何從大寫 A 到小寫 z 的字符 [adgk] 查找給定集合內的任何字符 [^adgk] 查找給定集合外的任何字符 

量詞  
? 匹配任何包含零個或一個的字符串,如:ba?d匹配bd、bad  
+ 匹配任何包含至少一個的字符串,如:ba+d匹配bad、baad  
* 匹配任何包含零個或多個的字符串,如:ba*d匹配bd、bad、baad  
{n} 匹配包含恰好出現n次的序列的字符串,如:ba{1}d匹配bad  
{n,m} 匹配包含至少n次但不超過m次 的序列的字符串,如:ba{0,1}d匹配bd、bad  
{n,} 匹配包含至少出現n次的序列的字符串,如:ba{0,}匹配bd、bad、baad、baaad    
貪婪量詞:先看整個的字符串是否匹配,如果發現沒有匹配,去年該字符串中的最后一個字符并再次嘗試,如:?、+、*、{n}、{n, m}、{n, },默認就為貪婪量詞  
惰性量詞:先看字符串中的第一個字母是否匹配,如果單獨這一個字符還不夠,就讀入下一個字符,組成兩個字符的字符串,與貪婪量詞的工作方式恰好相反,如:??、+?、*?、{n}?、{n, m}?、{n, }?  
支配量詞:只嘗試匹配整個字符串,如果整個字符串不能產生匹配,不做進一步嘗試,如:?+、++、*+、{n}+、{n, m}+、{n, }+  

var sToMatch = "abbbaabbbaaabbb1234"; var re1 = /.*bbb/g; //匹配結果為"abbbaabbbaaabbb" var re2 = /.*?bbb/g; //只有惰性量詞才能匹配成功,匹配結果為"abbb","aabbb","aaabbb" var re3 = /.*+bbb/g; //匹配不了,直接報錯 

復雜模式之分組:通過一系列括號包圍一系列字符、字符類以及量詞來使用的  
/(dog){2}/  匹配"dogdog"  
/([bd]ad?)*/  匹配空, "ba", "da", "bad", "dad"  
/(mom( and dad)?)/  匹配"mom", "mom and dad"  
/^/s*(.*?)/s+$/  匹配首尾的空白字符,也可以用/^/s+|/s+$/g  
復雜模式之反向引用:也叫捕獲性分組,按照從左到右遇到的左括號字符的順序進行創建和編號的,例如表達式(A?(B?(C?)))將產生編號從1-3的三個反向引用:(A?(B?(C?)))、(B?(C?))、(C?)  
反向引用有幾種不同的使用方法:  
首先,使用正則表達式對象的test()、match()或search()方法后,反向引用的值可以從RegExp構造函數中獲得,如:  

var sToMatch = "#123456789"; var reNumbers = /#(/d+)/; reNumbers.test(sToMatch); alert(RegExp.$1); //"123456789",$1保存了第一個反向引用,依次可以用$2,$3... 

然后,可以直接在定義分組的表達式中包含反向引用,通過使用特殊轉義序列如/1、/2等實現  

var sToMatch = "dogdog"; var reDogdog = /(dog)/1/; //等同于/dogdog/ alert(reDogdog.test(sToMatch)); //true 

第三,反向引用可以用在String對象的replace()方法中,通過使用特殊字符序列如$1、$2等實現  

var sToChange = "1234 5678"; var reMatch = /(/d{4}) (/d{4})/; alert(sToChange.replace(reMatch, "$2 $1")); //"5678 1234" 

復雜模式之候選:使用管道符(|)放在兩個單獨的模式之間  

var reBadWords = /badword | anotherbadword/gi; var sUserInput = "This is a String using badword1 and badword2."; var sFinalText = sUserInput.replace(reBadWords, function(sMatch){  return sMatch.replace(/./g, "*"); //用星號替換敏感詞中的每一個字母 }); 

復雜模式之非捕獲性分組:相比捕獲性分組,不會創建反向引用,在較長的正則表達式中,存儲反向引用會降低匹配速度,通過使用非捕獲性分組,仍然可以擁有與匹配字符串序列同樣的能力,而無需存儲結果的開銷  

var sToMatch = "#123456789"; var reNumbers = /#(?:/d+)/; //只需要在左括號的后面加上一個問號和一個緊跟的冒號就可創建一個非捕獲性分組 reNumbers.test(sToMatch); alert(RegExp.$1); //"",輸出空字符串是因為該分組是非捕獲性的 alert(sToMatch.replace(reNumbers, "abcd$1")); //輸出結果是"abcd$1"而不是"abcd123456789",不能使用任何反向引用 

又如:  

String.prototype.stripHTML = function(){  var reTag = /<(?:.|/s)*?>/g; //匹配所有的HTML標簽,防止插入惡意HTML代碼  return this.replace(reTag, ""); } 

復雜模式之前瞻:告訴正則表達式運算器向前看一些字符而不移動其位置,存在正向前瞻(檢查接下來出現的是不是某個特定字符集)和負向前瞻(檢查接下來的不應該出現的特定字符集)  
正向前瞻(?=n) 匹配任何其后緊接指定字符串 n 的但不包括 n的字符串,注意這里的括號不是分組  
負向前瞻(?!n) 匹配任何其后沒有緊接指定字符串 n 的字符串,如:  

var sToMatch1 = "bedroom"; var sToMatch2 = "bedding"; var reBed1 = /(bed(?=room))/; var reBed2 = /(bed(?!room))/; alert(reBed1.test(sToMatch1)); //true alert(RegExt.$1); //輸出"bed"而不是"bedroom" alert(reBed1.test(sToMatch2)); //false alert(reBed2.test(sToMatch1)); //false alert(reBed2.test(sToMatch2)); //true alert(RegExt.$1); //輸出的也是"bed" 

復雜模式之邊界:用于正則表達式中表示模式的位置  
n$ 匹配任何結尾為 n 的字符串,如:/(/w+)/.$/匹配行尾單詞"one.","two."等  
^n 匹配任何開頭為 n 的字符串,如:/^(.+?)/b/匹配起始位置后的一個或多個單詞字符  
/b 查找位于單詞的開頭或結尾的匹配,如://b(/S+?)/b/g 或 /(/w+)/g匹配從字符串中抽取單詞  
/B 查找不處在單詞的開頭或結尾的匹配  
復雜模式之多行模式:  

var sToMatch = "First second/nthird fourth/nfifth sixth"; var reLastWordOnLine = /(/w+)$/gm; alert(sToMatch.match(reLastWordOnLine)); //輸出["second", "fourth", "sixth"]而不只是"sixth" 

RegExp對象的屬性和方法:  
global  //RegExp 對象是否具有標志 g  
ignoreCase  //RegExp 對象是否具有標志 i  
multiline  //RegExp 對象是否具有標志 m  
source  //正則表達式的源文本  
lastIndex  //一個整數,標示下一次匹配鈄會從哪個字符位置開始(只有當使用exec()和test()函數才會填入,否則為0)  
真正使用到的是lastIndex,如:  

 var sToMatch = "bbq is short for barbecue"; var reB = /b/g; reB.exec(sToMatch); alert(reB.lastIndex); //1,匹配位置是0,lastIndex為1 reB.exec(sToMatch); alert(reB.lastIndex); //2 reB.exec(sToMatch); alert(reB.lastIndex); //18 reB.lastIndex = 0; //重頭開始匹配 reB.exec(sToMatch); alert(reB.lastIndex); //1而不是21 

靜態屬性  
input,短名為$_,最后用于匹配的字符串(傳遞給exec()或test()的字符串)  
leftContext,短名為$^,在上次匹配的前面的子串  
rightContext,短名為$^,在上次匹配之后的子串  
lastMatch,短名為$&,最后匹配的字符  
lastParen,短名為$+,最后匹配的分組  
multiline,短名為$*,用于指定是否所有的表達式都使用多行模式的布爾值,不同于其它屬性,不依賴最后一次執行的匹配,它可以設置所有的正則表達式的m選項,RegExp.multiline = "true";,注意IE和Opera不運行它  

 var sToMatch = "this has been a short, short summer";  var reShort = /(s)hort/g;  reShort.test(sToMatch);  alert(RegExg.input); //"this has been a short, short summer";  alert(RegExg.leftContext); //"this has been a ";  alert(RegExg.rightContext); //", short summer";  alert(RegExg.lastMatch); //"short"  alert(RegExg.lastParen); //"s"  compile() //編譯正則表達式 alert(reCat.exec("a cat, a Cat, a cAt caT")); //返回一個數組,數組中的第一個條目是第一個匹配,其他的是反向引用 alert(reCat.test("cat")); //true,檢索字符串中指定的值,返回 true 或 false。 

支持正則表達式的String對象的方法  

var sToMatch = "a bat, a Cat, a fAt, a faT cat"; var reAt = /at/gi; alert(sToMatch.match(reAt)); //返回一個包含在字符串中的所有匹配的數組 alert(sToMatch.search(reAt)); //輸出第一次在字符串中出現的位置3,全局匹配g在search()時不起作用 alert(sToMatch.replace(reAt, "Dog")); //替換與正則表達式匹配的子串 alert(sToMatch.replace(reAt, function(sMatch){  return "Dog"; })); alert(sToMatch.split(//,/)); //把字符串分割為字符串數組 

常用模式  
日期:/(?:0[1-9]|[12][0-9]|3[01])//(?:0[1-9]|1[0-2])//(?:19|20/d{2})/  
URL:/^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$/  
E-mail地址:/^(?:/w+/.?)*/w+@(?:/w+/.?)*/w+$/  
國內電話號碼:d{3}-d{8}|d{4}-d{7}  
騰訊QQ號:[1-9][0-9]{4,}  
郵政編碼:[1-9]d{5}(?!d)  
身份證:d{15}|d{18}  
ip地址:d+.d+.d+.d+  
中文字符: [u4e00-u9fa5]  
雙字節字符(包括漢字在內):[^x00-xff]  
    String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}  
全角字符:/[^uFF00-uFFFF]/g  
匹配特定數字:  

^[1-9]/d*$    //匹配正整數 ^-[1-9]/d*$   //匹配負整數 ^-?[1-9]/d*$   //匹配整數 ^[1-9]/d*|0$  //匹配非負整數(正整數 + 0) ^-[1-9]/d*|0$   //匹配非正整數(負整數 + 0) ^[1-9]/d*/./d*|0/./d*[1-9]/d*$   //匹配正浮點數 ^-([1-9]/d*/./d*|0/./d*[1-9]/d*)$  //匹配負浮點數 ^-?([1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0)$  //匹配浮點數 ^[1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0$   //匹配非負浮點數(正浮點數 + 0) ^(-([1-9]/d*/./d*|0/./d*[1-9]/d*))|0?/.0+|0$  //匹配非正浮點數(負浮點數 + 0) 

是不是很全面,很詳細,感覺不錯的就把這文章好好收藏,js正則表達式很重要的學習環節,大家一定好好學習。



注:相關教程知識閱讀請移步到正則表達式頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人在线播放| 欧美日韩aaaa| 日韩精品福利网站| 欧美成人一区在线| 清纯唯美亚洲综合| 日韩成人激情影院| 亚洲va电影大全| 欧美老女人在线视频| 国产精品国产自产拍高清av水多| 欧美激情第一页xxx| 国内揄拍国内精品少妇国语| 国产一区二区成人| 日韩高清av在线| 国产999在线观看| 97成人在线视频| www.久久久久久.com| 国产丝袜视频一区| 日韩电影免费观看在线观看| 色综久久综合桃花网| 91久久久久久久一区二区| 久久精品成人欧美大片古装| 97国产精品人人爽人人做| 欧美壮男野外gaytube| 国产91在线播放精品91| 亚洲欧美日韩天堂一区二区| 国产福利精品视频| 一夜七次郎国产精品亚洲| 欧美精品久久久久久久免费观看| 亚洲国产欧美在线成人app| 欧美疯狂xxxx大交乱88av| 日本久久久久久久久久久| 国内精品免费午夜毛片| 亚洲视频777| 97精品欧美一区二区三区| 国产精品旅馆在线| 日本免费一区二区三区视频观看| 色综合视频网站| 国产欧美精品一区二区| 日本精品视频在线| 久久青草精品视频免费观看| 日韩免费电影在线观看| 国外日韩电影在线观看| 中文字幕免费国产精品| 久久九九精品99国产精品| 亚洲一区二区三区四区视频| 中文字幕亚洲综合久久筱田步美| 欧美大片免费观看| 国内精品久久影院| 97在线观看视频| 欧美激情久久久久| 国产日韩欧美黄色| 亚洲精品国产品国语在线| 最新亚洲国产精品| 久久亚洲国产精品成人av秋霞| 欧美丰满少妇xxxxx做受| 日韩小视频在线| 午夜欧美大片免费观看| 亚洲国产成人在线视频| 国产这里只有精品| 欧美怡春院一区二区三区| 久久天天躁狠狠躁夜夜躁| 久久久影视精品| 久久视频在线视频| 亚洲欧美在线看| 亚洲精品国产suv| 色系列之999| 国产精品999| 欧美久久精品一级黑人c片| 国产精品高潮粉嫩av| 欧美在线一区二区视频| 91高清视频在线免费观看| 日韩在线观看免费网站| 在线激情影院一区| 欧美日韩午夜视频在线观看| 欧美日韩免费在线| 在线成人激情黄色| 97久久精品国产| 日本高清视频一区| 欧美激情性做爰免费视频| 欧美激情视频网| 成人黄色生活片| 欧美激情精品久久久久久黑人| 欧美电影免费观看大全| 色综合老司机第九色激情| 亚洲精品电影网在线观看| 中文字幕欧美日韩va免费视频| 欧美性猛交xxxx免费看久久久| 精品自拍视频在线观看| 久久久久久国产精品美女| 国产自摸综合网| 国产精品视频免费在线观看| 性色av一区二区咪爱| 国产精品久久中文| 久久久成人精品| 日韩激情av在线免费观看| 国产美女久久精品| 欧洲成人午夜免费大片| 性亚洲最疯狂xxxx高清| 国产亚洲美女久久| 69影院欧美专区视频| 日本伊人精品一区二区三区介绍| 欧美亚洲激情视频| 亚洲欧美日韩另类| 欧美日韩国产在线播放| 日韩av影院在线观看| 91色在线观看| 久久精品国产一区二区电影| 久久亚洲精品国产亚洲老地址| 欧美午夜视频一区二区| 精品久久久久久中文字幕大豆网| 国产69精品久久久久99| 亚洲女性裸体视频| 欧美性猛交xxxx富婆弯腰| 久久91亚洲精品中文字幕奶水| 91超碰caoporn97人人| 久久亚洲精品中文字幕冲田杏梨| 欧美色另类天堂2015| 国产精品啪视频| 国产精品色午夜在线观看| 亚洲视频在线免费观看| 欧美日韩另类在线| 久久99国产精品自在自在app| 亚洲第一福利网站| 国产一区二区黑人欧美xxxx| 亚洲偷熟乱区亚洲香蕉av| 国产精品美女在线观看| 亚洲欧洲日本专区| 欧美日韩国产精品一区| 日韩免费在线看| 一级做a爰片久久毛片美女图片| 日韩欧美国产一区二区| 国产精品麻豆va在线播放| 欧美精品videos另类日本| 亚洲午夜未满十八勿入免费观看全集| 久久香蕉国产线看观看av| 国产视频精品在线| 久久久久久免费精品| 欧美第一页在线| 国产精品一区二区av影院萌芽| 成人激情视频在线播放| 91精品国产自产在线| 亚洲男人天堂网| 姬川优奈aav一区二区| 久久久久久久久亚洲| 亚洲一区二区三区久久| 成人欧美一区二区三区黑人孕妇| 国产成人福利网站| 国产成人97精品免费看片| 欧美日韩国产一区二区| 久久精品国产一区二区三区| 国产精品自拍视频| 亚洲欧洲国产伦综合| 这里只有精品在线播放| 国产人妖伪娘一区91| 亚洲精品久久久久久下一站| 久久久久久久999精品视频| 久久精品国产亚洲精品2020| 亚洲高清免费观看高清完整版| 欧洲成人免费视频| 日韩在线视频线视频免费网站| 国产精品黄色av| 理论片在线不卡免费观看| 操人视频在线观看欧美| 国产精品扒开腿做爽爽爽视频|