欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

超全的js正則表達(dá)式整理筆記

 更新時(shí)間:2015年12月01日 11:59:45   作者:zzq58157383  
這篇文章為大家分享了一篇超全的javascript正則表達(dá)式整理筆記,感興趣的小伙伴們可以參考一下

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


元字符 

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

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

方括號(hào) 

[abc] 查找方括號(hào)之間的任何字符 
[^abc] 查找任何不在方括號(hào)之間的字符 
[0-9] 查找任何從 0 至 9 的數(shù)字 
[a-z] 查找任何從小寫(xiě) a 到小寫(xiě) z 的字符 
[A-Z] 查找任何從大寫(xiě) A 到大寫(xiě) Z 的字符 
[A-z] 查找任何從大寫(xiě) A 到小寫(xiě) z 的字符 
[adgk] 查找給定集合內(nèi)的任何字符 
[^adgk] 查找給定集合外的任何字符 

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

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

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

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

然后,可以直接在定義分組的表達(dá)式中包含反向引用,通過(guò)使用特殊轉(zhuǎn)義序列如\1、\2等實(shí)現(xiàn) 

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

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

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

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

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, "*"); //用星號(hào)替換敏感詞中的每一個(gè)字母 
}); 

復(fù)雜模式之非捕獲性分組:相比捕獲性分組,不會(huì)創(chuàng)建反向引用,在較長(zhǎng)的正則表達(dá)式中,存儲(chǔ)反向引用會(huì)降低匹配速度,通過(guò)使用非捕獲性分組,仍然可以擁有與匹配字符串序列同樣的能力,而無(wú)需存儲(chǔ)結(jié)果的開(kāi)銷(xiāo) 

var sToMatch = "#123456789"; 
var reNumbers = /#(?:\d+)/; //只需要在左括號(hào)的后面加上一個(gè)問(wèn)號(hào)和一個(gè)緊跟的冒號(hào)就可創(chuàng)建一個(gè)非捕獲性分組 
reNumbers.test(sToMatch); 
alert(RegExp.$1); //"",輸出空字符串是因?yàn)樵摲纸M是非捕獲性的 
alert(sToMatch.replace(reNumbers, "abcd$1")); //輸出結(jié)果是"abcd$1"而不是"abcd123456789",不能使用任何反向引用 

又如: 

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

復(fù)雜模式之前瞻:告訴正則表達(dá)式運(yùn)算器向前看一些字符而不移動(dòng)其位置,存在正向前瞻(檢查接下來(lái)出現(xiàn)的是不是某個(gè)特定字符集)和負(fù)向前瞻(檢查接下來(lái)的不應(yīng)該出現(xiàn)的特定字符集) 
正向前瞻(?=n) 匹配任何其后緊接指定字符串 n 的但不包括 n的字符串,注意這里的括號(hào)不是分組 
負(fù)向前瞻(?!n) 匹配任何其后沒(méi)有緊接指定字符串 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" 

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

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

RegExp對(duì)象的屬性和方法: 
global  //RegExp 對(duì)象是否具有標(biāo)志 g 
ignoreCase  //RegExp 對(duì)象是否具有標(biāo)志 i 
multiline  //RegExp 對(duì)象是否具有標(biāo)志 m 
source  //正則表達(dá)式的源文本 
lastIndex  //一個(gè)整數(shù),標(biāo)示下一次匹配鈄會(huì)從哪個(gè)字符位置開(kāi)始(只有當(dāng)使用exec()和test()函數(shù)才會(huì)填入,否則為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; //重頭開(kāi)始匹配 
reB.exec(sToMatch); 
alert(reB.lastIndex); //1而不是21 

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

 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() //編譯正則表達(dá)式 
alert(reCat.exec("a cat, a Cat, a cAt caT")); //返回一個(gè)數(shù)組,數(shù)組中的第一個(gè)條目是第一個(gè)匹配,其他的是反向引用 
alert(reCat.test("cat")); //true,檢索字符串中指定的值,返回 true 或 false。 

支持正則表達(dá)式的String對(duì)象的方法 

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

常用模式 
日期:/(?: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+$/ 
國(guó)內(nèi)電話號(hào)碼:d{3}-d{8}|d{4}-d{7} 
騰訊QQ號(hào):[1-9][0-9]{4,} 
郵政編碼:[1-9]d{5}(?!d) 
身份證:d{15}|d{18} 
ip地址:d+.d+.d+.d+ 
中文字符: [u4e00-u9fa5] 
雙字節(jié)字符(包括漢字在內(nèi)):[^x00-xff] 
    String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;} 
全角字符:/[^uFF00-uFFFF]/g 
匹配特定數(shù)字: 

^[1-9]\d*$    //匹配正整數(shù) 
^-[1-9]\d*$   //匹配負(fù)整數(shù) 
^-?[1-9]\d*$   //匹配整數(shù) 
^[1-9]\d*|0$  //匹配非負(fù)整數(shù)(正整數(shù) + 0) 
^-[1-9]\d*|0$   //匹配非正整數(shù)(負(fù)整數(shù) + 0) 
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮點(diǎn)數(shù) 
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配負(fù)浮點(diǎn)數(shù) 
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮點(diǎn)數(shù) 
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) + 0) 
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù) + 0) 

是不是很全面,很詳細(xì),感覺(jué)不錯(cuò)的就把這文章好好收藏,js正則表達(dá)式很重要的學(xué)習(xí)環(huán)節(jié),大家一定好好學(xué)習(xí)。

相關(guān)文章

  • 循序漸進(jìn)掌握遞歸正則表達(dá)式【推薦】

    循序漸進(jìn)掌握遞歸正則表達(dá)式【推薦】

    這篇文章主要介紹了循序漸進(jìn)掌握遞歸正則表達(dá)式的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-08-08
  • [a] 1 [/a]轉(zhuǎn)換為網(wǎng)址的UBB的正則

    [a] 1 [/a]轉(zhuǎn)換為網(wǎng)址的UBB的正則

    [a] 1 [/a]轉(zhuǎn)換為網(wǎng)址的UBB的正則...
    2007-11-11
  • 正則表達(dá)式問(wèn)號(hào)的四種用法詳解

    正則表達(dá)式問(wèn)號(hào)的四種用法詳解

    這篇文章主要介紹了正則表達(dá)式問(wèn)號(hào)的四種用法詳解的相關(guān)資料,需要的朋友可以參考下
    2015-09-09
  • 正則基礎(chǔ)之 NFA引擎匹配原理

    正則基礎(chǔ)之 NFA引擎匹配原理

    不懂正則引擎原理的情況下,同樣可以寫(xiě)出滿足需求的正則,但是不知道原理,卻很難寫(xiě)出高效且沒(méi)有隱患的正則。所以對(duì)于經(jīng)常使用正則,或是有興趣深入學(xué)習(xí)正則的人,還是有必要了解一下正則引擎的匹配原理的。
    2009-07-07
  • 談?wù)勎覍?duì)正則表達(dá)式的認(rèn)識(shí)

    談?wù)勎覍?duì)正則表達(dá)式的認(rèn)識(shí)

    正則表達(dá)式(Regular Expression)是一個(gè)概念,一種語(yǔ)法、句法的約定。每一種具體的語(yǔ)句(C#,Java,JavaScript)有其對(duì)于正則表達(dá)式的具體實(shí)現(xiàn),并且會(huì)有差別。正則表達(dá)式30分鐘入門(mén)教程講述的是.net(C#)的正則表達(dá)式
    2014-02-02
  • 55分鐘學(xué)會(huì)正則表達(dá)式(來(lái)自Github)

    55分鐘學(xué)會(huì)正則表達(dá)式(來(lái)自Github)

    正則表達(dá)式是一種查找以及字符串替換操作。正則表達(dá)式在文本編輯器中廣泛使用,比如正則表達(dá)式被用于文本的一些操作,這里雖然說(shuō)時(shí)間有點(diǎn)短,但經(jīng)過(guò)一段時(shí)期的聯(lián)系,每次正則可能功能更全,代碼量也更好,考慮的也會(huì)更周全
    2020-04-04
  • 精確查找PHP WEBSHELL木馬 修正版

    精確查找PHP WEBSHELL木馬 修正版

    上篇提到了關(guān)于網(wǎng)上流傳查找PHP webshell的python腳本中,不嚴(yán)謹(jǐn)?shù)拇a,并且給出了一個(gè)python的檢測(cè)代碼,同時(shí),下文里也提到不能檢測(cè)到反引號(hào)的命令執(zhí)行的地方。今天,我想了下,現(xiàn)在把思路發(fā)出來(lái)。
    2011-04-04
  • 數(shù)據(jù)庫(kù)中使用正則表達(dá)式小結(jié)

    數(shù)據(jù)庫(kù)中使用正則表達(dá)式小結(jié)

    這篇文章主要介紹了數(shù)據(jù)庫(kù)中使用正則表達(dá)式小結(jié)的相關(guān)資料,需要的朋友可以參考下
    2015-10-10
  • Java正則相關(guān)的Pattern和Matcher類(lèi)及遇到的坑

    Java正則相關(guān)的Pattern和Matcher類(lèi)及遇到的坑

    這篇文章主要介紹了Java正則相關(guān)的Pattern和Matcher類(lèi)及遇到的坑,本文給大家提到了Matcher 里面的三個(gè)方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 正則表達(dá)式中兩個(gè)反斜杠的匹配規(guī)則詳解

    正則表達(dá)式中兩個(gè)反斜杠的匹配規(guī)則詳解

    這篇文章主要介紹了正則表達(dá)式中兩個(gè)反斜杠的匹配規(guī)則,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論