摘要:主要有兩種操作匹配和捕獲鏈接描述正則表達式語法正則表達式的創建正則表達式是有元字符和修飾符組成,將元字符和修飾符寫在中。
正則表達式
正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯,許多程序設計語言都支持利用正則表達式進行字符串操作。主要有兩種操作:匹配和捕獲 鏈接描述正則表達式語法
正則表達式的創建
正則表達式是有元字符和修飾符組成,將元字符和修飾符寫在" // "中。
eg: var reg = /d+/g;//意思是在全局中的多個數字
元字符:
: 轉義字符
^: 以某一個元字符開始
$: 以某一個元字符結束
: 匹配一個換行
".":除了 以外的任意字符
(): 分組
x|y: x或者y中第一個
[xyz]:x或者y或者z中的一個
[^xyz]:除了三個以外的任意一個字符
[a-z]:a 和 z 之間的任意字符
[^a-z]:除了a 和 z 之間的任意字符
d:表示 0-9 之間的數字
D:除了0-9之間的數字以外的任意字符
:匹配一個邊界符 w1 w2
w:數字、字母、下劃線中的任意字符 [0-9a-zA-Z_]
s:匹配一個空白字符 空格、一個制表符、換頁符...
量詞元字符(數量元字符)
* :出現零到多次
+:出現一到多次
?:出現零次或者一次
{n}:出現 n 次
{n,}:出現 n 到多次
{n,m}:出現 n 到 m 次
標志字符
g:全局搜索,記憶方式 global
i:不區分大小寫,記憶方式 ignore
m:多行搜索
使用方式正則對象的方法
1.test() 方法用于檢測一個字符串是否匹配某個模式,若匹配,返回true,否則返回false
eg:手機號驗證
2.exec()方法用于檢索字符串中的正則表達式的匹配,若匹配,返回匹配值,否則返回false
匹配時,返回值跟 match 方法沒有 g 標識時是一樣的。數組第 0 個表示與正則相匹配的文本,后面 n 個是對應的 n 個捕獲的文本,最后兩個是對象 index 和 input同時它會在正則實例的 lastIndex 屬性指定的字符處開始檢索字符串 string。當 exec() 找到了與表達式相匹配的文本時,在匹配后,它將把正則實例的 lastIndex 屬性設置為匹配文本的最后一個字符的下一個位置。有沒有 g 標識對單詞執行 exec 方法是沒有影響的,只是有 g 標識的時候可以反復調用 exec() 方法來遍歷字符串中的所有匹配文本。當 exec() 再也找不到匹配的文本時,它將返回 null,并把 lastIndex 屬性重置為 0
var string = "2018.07.23"; var regex2 = /(d+)/g; console.log( regex2.exec(string) ); console.log( regex2.lastIndex); console.log( regex2.exec(string) ); console.log( regex2.lastIndex); console.log( regex2.exec(string) ); console.log( regex2.lastIndex); console.log( regex2.exec(string) ); console.log( regex2.lastIndex);
其中正則實例lastIndex屬性,表示下一次匹配開始的位置.比如第一次匹配了“2017”,開始下標是0,共4個字符,因此這次匹配結束的位置是3,下一次開始匹配的位置是4。
從上述代碼看出,在使用exec時,經常需要配合使用while循環:
var string = "2018.07.23"; var regex2 = /(d+)/g; var result; while ( result = regex2.exec(string) ) { console.log( result, regex2.lastIndex ); }正則的匹配
字符匹配
精確匹配就不說了,比如/hello/,也只能匹配字符串中的"hello"這個子串。
正則表達式之所以強大,是因為其能實現模糊匹配。
匹配多種數量
var str = "cde cdde cffffde cffffdde cffffddde"; var reg = /cd{3,5}e/g; console.log(str.match(reg));
貪婪性和懶惰性
貪婪:eg:
var str = "123"; var reg = /d+/g; console.log(reg.exec(str));
懶惰("http://"正則表達式末尾加上"?")eg:
var str = "123"; var reg = /d+?/g; console.log(reg.exec(str));
匹配多種情況
用字符組[]來匹配多種情況,其他幾種形式(dDsSwW)都可以等價成這種。eg:
替換
eg:
讀正則
不僅自己會寫正則,還要讀懂其他人寫得正則
操作符的優先級是從上到下,由高到低的,所以在分析正則的時候可以根據優先級來拆分正則,比如 /ab?(c|de*)+|fg/
因為括號是一個整體,所以/ab?()+|fg/,括號里面具體是什么可以放到后面再分析
根據量詞和管道符的優先級,所以a, b?, ()+和管道符后面的f, g
同理分析括號里面的c|de => c和d, e
綜上,這個正則描述的是
上面是我今天學習的內容,在這里分享給大家,有什么不對的可以留言給我,爭取做到最好,希望大家有什么好的建議,好的文章也可以分享給我,我們共同努力!希望大家多多分享,下面是我的微信號碼,有對前端感興趣的朋友我們可以交流一下:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/113525.html
摘要:控制權和傳動這兩個詞可能在搜一些博文或者資料的時候會遇到,這里做一個解釋先控制權是指哪一個正則子表達式可能為一個普通字符元字符或元字符序列組成在匹配字符串,那么控制權就在哪。 溫馨提示:文章很長很長,保持耐心,必要時可以跳著看,當然用來查也是不錯的。 正則啊,就像一座燈塔,當你在字符串的海洋不知所措的時候,總能給你一點思路;正則啊,就像一臺驗鈔機,在你不知道用戶提交的鈔票真假的時候,...
摘要:寫在前面正在看的源碼看到了部分感覺以前看的正則表達式基礎知識已經完全不夠用了現翻閱博客資料將一些中正則表達式難用的部分總結歸納方便自己和友翻閱正則分組重復匹配對于重復的匹配我們經常使用到正則表達式的分組功能我們使用正則匹配地址來實踐一下假 [TOC] 寫在前面 - Lionad 正在看VueJS的源碼, 看到了HtmlParser部分, 感覺以前看的正則表達式基礎知識已經完全不夠用了,...
閱讀 1684·2021-11-23 09:51
閱讀 3174·2021-09-26 10:21
閱讀 797·2021-09-09 09:32
閱讀 881·2019-08-29 16:06
閱讀 3307·2019-08-26 13:36
閱讀 771·2019-08-26 10:56
閱讀 2564·2019-08-26 10:44
閱讀 1142·2019-08-23 14:04