国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關于正則表達式的一些筆記整理

fancyLuo / 3167人閱讀

摘要:于是對應著,對應著輸出月日年九前瞻正則表達式從文本頭部想穩步開始解析,文本尾部方向,稱為前。只是條件不參與匹配找英文數字下劃線而且后面跟著數字的。

基礎知識

一 元字符

 單詞邊界
d 數字 [0-9]
w 英文 數字 下劃線  [a-z0-9_]
s 空白字符[	v

f] 	水平制表符,v垂直制表符,
換行符,
回車符,f換頁符

反義
B 非單詞邊界
D [^0-9]
W [^a-z0-9_]
S 非空白字符 [^	v

f]
.   任意字符 少用

.* 任意數量的不包含換行的字符 貪婪匹配
.? 懶惰 非貪婪匹配

u4e00-u9fa5 中文

二 量詞

{m,n} 匹配m-n次,優先匹配m次
{n,}  匹配n或以上次
{n}   匹配n次
?     0或1,有或無 等于{0,1}
+     1或以上等于{1,}
*     0或n都可以 任意 等于{0,}


eg:
/d?/            //匹配1或0個數字
/d{2,4}/        //匹配2到4個數字
/s+javas+/     //匹配有1個或多個空格的字符串java
/[^(]*/          //匹配1個或多個左括號

三 集合 字符類

[abc]    匹配a/b/c任意字符 
[^abc]   匹配除了abc外的任意字符  

[a-z]    匹配a到z任意字符 
//注意:里面的-代表的是范圍 例如
"ahd-fj-k".replace(/[a-z]/g,"A")   //輸出 》AAA-AA-A
//如果我想把斜杠也替換了呢 有兩個方法 
    1. 利用轉義符
    "ahd-fj-k".replace(/[a-z-]/g,"B")   //輸出BBBBBBBB
    2. 后面加多一個-
    "ahd-fj-k".replace(/[a-z-]/g,"B")   //輸出BBBBBBBB

//() 在集合里面默認被轉義了 like this 
//"(122)do(".replace(/[(d)]/g,"A")  輸出 AAAAAdoA  
//具體被轉義范圍不確定 歡迎普及補充 
 

四 分支

123|34|567 //匹配123或34或567

五 邊界 開始結束

^ //代表開始 在[]代表非
$ //代表結束

六 修飾符

g //全局匹配 不寫的話匹配完第一個就停止
i //忽略大小寫
m //忽略換行
//上面3可疊加使用

七 貪婪模式和非貪婪模式
js默認貪婪模式 即最大可能的匹配
想要改成非貪婪模式在后面加個?

例子:

"123456789".replace(/d{3,6}/,"XX") //輸出XX
//貪婪模式先匹配了最多的 6個數字》X 剩下3個數字也算是符合就再多一個X
"123456789".replace(/d{3,6}?/,"XX") //輸出XXX
//非貪婪模式 優先匹配了最低要求的3個數字一次 〉 3個X

八 分組與引用與捕獲
分組是正則中非常強大的功能 可以讓上面提到的量詞作用與一組字符。
語法 圓括號包裹(*);

/([0-9])[a-z]+1{3}/.test("2aa222") //true

/([0-9]+)[a-z]+1/.test("12aa12")   //true
/([0-9]+)[a-z]+1/.test("12aa13")   //false

//這里需要注意一個問題。分組"1"表示的并不是多個數字,而是和對應分組一模一樣的數字

/<([a-z]+)>.*/.test("sdlk
sdjks
sdkl") // true

并不是所有用()起來的就能被捕抓成為分組的。
下面就要說到 非捕抓分組可以提高性能和簡化邏輯
用法:

**(***) //識別成為可捕抓分組
(?:***) //識別成為非捕抓分組**

例子: 
把a1b2c3d4里面的數字都+1
"a1b2c3d4".replace(/(d)/g,function($1){
return $1*1+1
})
//輸出 a2b3c4d5

把2015-12-25 格式成 12月25日2015年
"2015-12-25".replace(/(d{4})-(d{2})-(d{2})/g,"$2月$3日$1年")  
//輸出 12月25日2015年

非捕抓例子:
"2015-12-25".replace(/(d{4})-(?:d{2})-(d{2})/g,"$2月$3日$1年") 
//第二個()里面有?:  所以它不被捕抓成分組。 于是$1對應著2015, $2對應著25
//輸出 25月$3日2015年  

九 前瞻
正則表達式從文本頭部想穩步開始解析,文本尾部方向,稱為“前”。
簡單理解為 從左到右

前瞻就是 向前檢查是否屬于斷言
后顧/后瞻方向相反 但是javascript不支持后瞻。

正向前瞻 例子:
"a2*3w4sb".replace(/w(?=d)/g,"X") //輸出X2*3X4sb
//主角是w 只對它進行匹配。
//(?=d)這個就是斷言 就是條件。只是條件不參與匹配
//找w (英文|數字|下劃線) 而且后面跟著d 數字的。
//所以符合的有 a2的a w4的w; 


負向前瞻 例子:
"a2*3w4sb".replace(/w(?!d)/g,"X") //輸出 aX*XwXX
//主角是w 只對它進行匹配。
//(?!d)這個就是斷言 就是條件。只是條件不參與匹配
//找w (英文|數字|下劃線) 而且后面不是d 數字的。
//所以符合的有 2*的2 3w的3 4s的4 sb的s b后面什么都沒跟所以符合; 
 


調用方法
Js風格  調用RegExp對象的構造函數
var reg = new RegExp("^[a-z]+[0-9]$", "gi")

Perl風格 寫在斜杠中
var reg = /^[a-z]+[0-9]$/gi

常用

test 返回布爾值

例子:
/^d+$/.test("12637") //true
/^d+$/.test("sdk")   //false

search 返回搜索到的對應位置 沒有則-1

//注意 search只查找一次,即使設置了g。重復調用也是從起始位置開始

 例子 
 "ad1cd2c".search(/d/g) //2  第一個數字的位置  
 "adcd".search(/d/g)    //-1 找不到

replace 替換

("a1b2c3").replace(/d/g,"數字") //a數字b數字c數字

split 分割成數組 里面也能寫正則。 如果找不到匹配分割的把自己變數組

   "a12b23c34".split("1")      //["a", "2b23c34"]
   "a12b23c34".split(/d{2}/g) //["a", "b", "c", ""]    
   "a12b23c34".split(/[23]/g)  //["a1", "b", "", "c", "4"] 
   "a12b23c34".split(/[55]/g)  //["a12b23c34"]

match 與 exec 返回數組 匹配到的字符串

兩者相似又不同。 寫法上不一樣

match是字符串方法,寫法為:str.match(reg)
exec是正則表達式方法,寫法為:reg.exec(str)

   寫法:
   var reg = new RegExp("abc") ; 
   var str = "3abc4,5abc6";
   str.match(reg);

   var reg = new RegExp("abc") ; 
   var str = "3abc4,5abc6";
   reg.exec(str ); 
   
   ---------------------------------------
   
   無子表達式非全局時:
   **exec和match執行的結果是一樣,均返回第一個匹配的字符串內容;**
   
   var reg = new RegExp("[a-z]+") ; 
   var str = "1abc2,3abc4";
   alert(str.match(reg));
   alert(reg.exec(str));   
   //都是輸出  abc
   
   
   無子表達式全局匹配 :
   **match執行了全局匹配查詢;exec找到一個匹配即返回。**
   var reg = new RegExp("[a-z]+","g") ; 
   var str = "1abc2,3bcd4";
   console.log(str.match(reg)); //["abc", "bcd"]
   console.log(str.match(reg)); //["abc", "bcd"]
   console.log(reg.exec(str));  //["abc"]
   console.log(reg.exec(str));  //["bcd"]
   //match執行了全局匹配查詢;而exec逐次返回。
   
   
   有子表達式 非全局:
   **match exec 都是返回結果 和分組**
   var reg = new RegExp("a(bc)") ; 
   var str = "3abc4,5abc6";
   console.log(str.match(reg)); //["abc", "bc"]
   console.log(reg.exec(str)); //["abc", "bc"]
  
   
   有子表達式 全局:
   **match忽略子表達式,只查找全匹配正則表達式并返回所有內容;
 exec 依然逐次返回結果 分組 
   **
   var reg = new RegExp("a(bc)","g") ; 
   var str = "3abc4,5abc6";
   console.log(str.match(reg));  //?["abc", "abc"]
   console.log(str.match(reg));  //?["abc", "abc"]
   console.log(reg.exec(str));   //?["abc", "bc", index: 1]
   console.log(reg.exec(str));   //?["abc", "bc", index: 7]
  


隨手簡單正則
/^d+$/.test("2l")  //只能輸入數字

/^d{n}$/.test("2222")  //只能輸入n個數字

/^d{n,}$/.test("22222")  //只能輸入n個以上數字

/^d{m,n}$/.test("22222")  //只能輸入m到n個數字

/^[a-z]+$/i  //只能輸入英文

/^[A-Z]+$/.test("SS’)  //只能輸入大寫英文

/^[0-9a-z]+$/i.test("1223ddsSSk")  //只能輸入英文和數字

/^w+$/.test("wS233_")  //只能英文數字下劃線

/^[u4e00-u9fa5]+$/.test("大家看") //純中文

//匹配手機號  : 手機號 1開頭 34568 第二位  數字任意9位
/^1[3|4|5|6|8]{1}d{9}$/.test("13347834892")

//匹配日期格式 YYYY-MM-DD
1/2開頭 3個數字 - [0|1][1-9] - [0-1][1-9]
/^[1-9]d{3}-[0-1]d-[0-3]d$/.test("2017-12-20")


//過濾html標簽: 以<開頭 >結尾的標簽  
"幕中閃著兇光。

索拉卡".replace(/<[^<>]+>/g,"") //簡單版匹配email郵箱:英文數字下劃線 @ 英文數字 .com /^w+@[a-z0-9]+(.com)$/.test("@qq.com") // 網上看到的Email地址: ^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$

有很多在線正則可視化的網站也是很有意思 寫了可以拷貝進去檢查看看。
點擊跳轉去正則可視化網頁

mark一下 僅供參考 歡迎更正補充 end

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/54908.html

相關文章

  • 關于正則達式一些筆記整理

    摘要:于是對應著,對應著輸出月日年九前瞻正則表達式從文本頭部想穩步開始解析,文本尾部方向,稱為前。只是條件不參與匹配找英文數字下劃線而且后面跟著數字的。 基礎知識 一 元字符  單詞邊界 d 數字 [0-9] w 英文 數字 下劃線 [a-z0-9_] s 空白字符[ v f] 水平制表符,v垂直制表符, 換行符, 回車符,f換頁符 反義 B 非單詞邊界 D [^0-9] W [^...

    dailybird 評論0 收藏0
  • 正則達式

    摘要:本文內容共正則表達式火拼系列正則表達式回溯法原理學習正則表達式,是需要懂點兒匹配原理的。正則表達式迷你書問世了讓幫你生成和解析參數字符串最全正則表達式總結驗證號手機號中文郵編身份證地址等是正則表達式的縮寫,作用是對字符串執行模式匹配。 JS 的正則表達式 正則表達式 一種幾乎可以在所有的程序設計語言里和所有的計算機平臺上使用的文字處理工具。它可以用來查找特定的信息(搜索),也可以用來查...

    bang590 評論0 收藏0
  • Java進階之路

    摘要:探索專為而設計的將探討進行了何種改進,以及這些改進背后的原因。關于最友好的文章進階前言之前就寫過一篇關于最友好的文章反響很不錯,由于那篇文章的定位就是簡單友好,因此盡可能的摒棄復雜的概念,只抓住關鍵的東西來講,以保證大家都能看懂。 周月切換日歷 一個可以進行周月切換的日歷,左右滑動的切換月份,上下滑動可以進行周,月不同的視圖切換,可以進行事件的標記,以及節假日的顯示,功能豐富 Andr...

    sushi 評論0 收藏0
  • Web前端常用代碼筆記整理(01)

    摘要:第二段代碼如下修改就可以了改這一行其實你的本質問題就在于誤認為是數組對象,然而它是構造函數。它繼承自構造函數被執行。故視為兩個字符串的拼接,結果為字符串,其長度為。 1.[] 和 Array 調用 slice 方法引起的問題 問題表示:在某些場景下,需要將函數的 arguments 參數作為一個數組調用,但是 arguments 是一個奇異對象,所以試著將 arguments 轉化為一...

    jas0n 評論0 收藏0

發表評論

0條評論

fancyLuo

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<