js正規表示式基本語法學習
最近在處理字串時候莫名的被正規表示式按在地上一頓摩擦,決定好好補一補以前欠下的正則債。
查了查百度百科發現正規表示式在不同語言的支援方法語法略有不同,於是打算在js裡面試試深淺
var str = "hello world";
- 1、在js中要引用正規表示式,則需要:/正規表示式/
- 2、普通匹配符:能匹配 與之對應的字元。
var r = str.match(/o/); // js 中區分大小寫 var R = str.match(/O/); // null console.log(r); //匹配的結果以陣列的方式展示
- 3、預設正則區分大小寫
console.log(R); // 沒匹配成功則返回null
- 4、正則標記符 (引數) : i,g ,m i不區分大小寫
i :不區分大小寫
g :全域性匹配
m :多行匹配
var str4 = "java jjjj java "; var r4 = str4.match(/JAVA/i); console.log(r4); //不區分大小寫匹配 var r4 = str4.match(/JAVa/img); console.log(r4); //多行匹配 併購且不區分大小寫
- 5、 能夠匹配多個字元中的一個匹配符 、無空格
\d :0~9
\w : 字母、數字、下劃線
. 匹配 除換行的所有字元(\d \w . 都只能匹配一個)
var str3 = "hello 2018"; var r5 = str3.match(/\d/g); //全域性匹配數字 console.log(r5); // 匹配9個結果 r5 = str3.match(/\w\d/g); // 全域性查詢 每個字元既要滿足\w\d 所以 公共匹配部分為 20 , 18 console.log(r5); //數字,字母匹配 20 , 18 r5= str3.match(/\w.\d/g); console.log(r5); // o 2 , 018
- 6、 能夠自定義規則的匹配符 [] [^] 代表取反
str = "128"; //匹配手機號 r6 = str.match(/1[345678]\d/); //[345678]代表匹配第二個數字 只能一個一個字元進行匹配 console.log(r6); //null str = "1,8"; r6 = str.match(/1[3,4,5,6,7,8]\d/); //[,] 也代表一個字元 console.log(r6); //1,8 str = "1s8"; r6 = str.match(/1[^32]\d/); //[^] 匹配除過32以外的所有字元 特殊符號也可以成功匹配 console.log(r6); //1s8 str = "1&8"; r6 = str.match(/1[^32]\d/); //[^] 匹配除過32以外的所有字元 特殊符號也可以成功匹配 console.log(r6); //1&8 str = "1&ss8"; r6 = str.match(/1[^32]\d/); //[^] 匹配除過32以外的所有字元 特殊符號也可以成功匹配 console.log(r6); //null 只能匹配三個字元,第三個字元匹配不滿足 返回null
- 8 、 用來修飾匹配次數的匹配符 {n} :代表前面的匹配符出現n次
str = "13833344341"; r8 = str.match(/1[345678]\d{9}/); //從第三個開始後面匹配9次 console.log(r8);
{n,m} 出現的次數是n-m之間 {n,} n - max n到無限次 {,n} min-n
str = "13833344341"; r8 = str.match(/1[345678]\d{3,11}/); //從第三個開始後面匹配9次 console.log(r8); //null 只能匹配三個字元,第三個字元匹配不滿足 返回null str = "138333443412222"; r8 = str.match(/1[345678]\d{3,}/); //從第三個開始後面匹配多次匹配成功但是不完全匹配 ,不符合手機號格式 console.log(r8); //138333443412222 str = "138122"; r8 = str.match(/1[345678]\d{,9}/); //從第三個開始後面匹配多次 匹配成功但是不完全匹配 ,不符合手機號格式 console.log(r8); //138333443412222
+ : 1~max次
str = "138122"; r8 = str.match(/1[345678]\d+/); //從第三個開始, 最少匹配一次 ,後面匹配多次 console.log(r8); //138122 str = "13"; r8 = str.match(/1[345678]\d+/); //+ 最少匹配一次 第三位沒有 返回null console.log(r8); // null ? : 0~1次 r8 = str.match(/1[345678]\d?/); //+ 最多匹配一次 第三位沒有 console.log(r8); // 13 str = "1322222"; r8 = str.match(/1[345678]\d?/); //+ 最多匹配一次 第4位沒有 只返回前三位 console.log(r8); // 132 str = "1322222"; r8 = str.match(/1[345678]\d+/); //+ 最少匹配一次 console.log(r8); // 1322222
* : 0~max次str = "1322222"; r8 = str.match(/1[345678]\d*/); //+ 最少匹配0次 console.log(r8); // 1322222 str = "13"; r8 = str.match(/1[345678]\d*/); //+ 最少匹配0次 console.log(r8); // 13
- 9 基於正規表示式的完整匹配 和特殊符號
str = "t13888899900"; r9 = str.match(/1[345678]\d{9}/); //匹配成功,但開頭格式不對 console.log(r9); // 13888899900
^ 表示開始匹配 [^] 表示取反
str = "t13888899900"; r9 = str.match(/^1[345678]\d{9}/); //匹配失敗,從開頭開始匹配 console.log(r9); // null str = "13888899900"; r9 = str.match(/^1[345678]\d{9}/); //匹配成功 console.log(r9); //13888899900 str = "1388889990000999"; r9 = str.match(/^1[345678]\d{9}/); //匹配成功 但是長度不對 console.log(r9); //1388889990000999
$ 持續匹配到結束
str = "1388889990000999"; r9 = str.match(/^1[345678]\d{9}$/); //匹配11位失敗 但是長度不對 console.log(r9); //null str = "13888899999"; r9 = str.match(/^1[345678]\d{9}$/); //匹配11位失敗 但是長度不對 console.log(r9); //13888899999
特殊符號匹配,在正規表示式中 "^" "." "$" "[]" "\" 需要轉義字元 加 \
str = "sss....."; r9 = str.match(/./g); //匹配字元 數字 下劃線 console.log(r9); //匹配失敗 sss..... str = "sss.^$.[]"; r9 = str.match(/.*\.\^\$\.\[\]$/); //匹配成功 console.log(r9); //sss.^$.[]
- 9 正規表示式條件分支
| 表示或者 , () 表示一個整體一般和 | 連用 表示分組進行匹配
var str = "a.jpeg"; var r = str.match(/\.jpeg$/); console.log(r); str = "12a$s.i"; r = str.match(/\.[jpe?g|git]$/); console.info(r); // .i [] 裡邊每一個都作為一個整體 i 是可以匹配到的。 //所以該用一個獨立的 str = "12a$s.jpg"; r = str.match(/\.jpeg|jpg|png$/); console.log(r); // jpg " . " 沒有匹配到 .jpg , jpg ,png 分別是一個獨立的整體 str = "12a$s.jpeg"; r = str.match(/\.jpeg|jpg|png$/); // .jpeg是一個整體可以匹配到 console.log(r); //.jpeg
括號裡的內容成為一個獨立的整體! 括號裡的內容分組,單獨進行匹配,如果進位制次匹配則在前面加上(?:) 來 取消分組匹配; 設定了 ^ $ match() 整體沒有匹配 分組就不會去匹配了!str = "12a$s.jpeg"; r = str.match(/\.(jpeg|jpg|png)$/); console.log(r); //.jpeg , jpeg 匹配結果是兩個 r = str.match(/\.(?:jpeg|jpg|png)$/); console.log(r); //.jpeg ?: 禁止分組在進行匹配
- 10 匹配數值型別
str = "-12.123e-1";
分析:符號|整形 | 小數點| 科學計算符
當我們在匹配一個相對於複雜的資料時候,把資料分成幾個幾個階段,每個階段用?把它括起來,只要專注他的某 一個部分,只要每一個部分匹配成功了,整體是拼接起來的,最後結果肯定是成功的。r = str.match(/^(-?)(0|[1-9]\d*)(\.)?(\d+)([Ee])?([-\+])?([0-9]*)$/); //細分情況 r2 = str.match(/^(-?)(0|[1-9]\d*)(\.\d+)?([Ee][-\+]?[0-9]*)?$/); console.log(r); console.log(r2);
- 11 匹配中文
匹配中文字元的正規表示式: [\u4e00-\u9fa5]
str = "a中文這種無公害"; r = str.match(/[\u4e00-\u9fa5]/g); console.log(r);
- 12 貪婪與懶惰 : 在正則中預設是貪婪模式(儘可能多的匹配)
預設貪婪模式進行匹配str = "aaabab"; r = str.match(/a.*b/); //結果是:aaabab ab 也滿足表示式但是沒有匹配,匹配到aaaba 預設是以貪婪模式匹配 console.log(r);
懶惰匹配 在修飾數量的匹配符後面加? ,匹配數值符號( * + ? {} ) 後面新增?即可會以懶惰模式匹配(儘可能少的匹配)str = "aaabab"; r = str.match(/a.*?b/); console.log(r); // aaab 為什麼是aaab? 而不是ab呢 ,因為最先匹配的優先順序高。
如需要請下載 https://download.csdn.net/download/weixin_38361347/10575812
相關文章
- 通過js正規表示式例項學習正規表示式基本語法JS
- 正規表示式的基本語法
- java 正規表示式語法學習Java
- 學習正規表示式(js、C#)JSC#
- 正規表示式-語法大全
- js加固之正規表示式學習筆記JS筆記
- 正規表示式基本規則
- 基本正規表示式概念
- Go 正規表示式學習Go
- Python語法進階(2)- 正規表示式Python
- Java正規表示式的語法與示例Java
- js正規表示式速查JS
- 正規表示式學習和練習
- 如何快速學習正規表示式
- 正規表示式入門學習
- 正規表示式學習筆記筆記
- Linux中基本正規表示式Linux
- 正規表示式基本概念
- Day1-學習筆記-js之正規表示式筆記JS
- 正規表示式例項蒐集,通過例項來學習正規表示式。
- JS中的正規表示式JS
- JS助記 ----- 正規表示式JS
- JS基礎:正規表示式JS
- JS金額正規表示式JS
- JS正規表示式入門JS
- JS正規表示式驗證JS
- JS正規表示式總結JS
- 正規表示式學習(2)---字元特性字元
- Python學習筆記 - 正規表示式Python筆記
- shell基礎 — 基本正規表示式
- JS常用正規表示式及驗證時間的正規表示式JS
- 正規表示式複習
- 正規表示式(初學)
- 從 Vue parseHTML 來學習正規表示式VueHTML
- JavaScript正規表示式學習筆記(一)JavaScript筆記
- 正規表示式re.compile的學習Compile
- JS正規表示式的驗證JS
- JS筆記(15): 正規表示式JS筆記