摘要:參考資料慕課網鬼斧神工之正則表達式正則表達式后向引用詳解正則表達式分鐘入門教程什么是正則表達式正則表達式是字符串的搜索和匹配的工具。貪婪模式懶惰模式后向引用分組捕獲的內容可以在表達式或其他程序中作進一步的處理。
參考資料
慕課網-鬼斧神工之正則表達式
正則表達式后向引用詳解
正則表達式30分鐘入門教程
正則表達式是字符串的搜索和匹配的工具。
正則表達式工具一個測試正則表達式的工具 regexpal -- 中文版
基本語法 界定符 //表示一個正則表達式的開始和結束
/0-9/ 界定符就是包含正則表達式在中間的兩個斜杠
原子 可見原子標點
英文字母數字
漢字、日文、阿拉伯文等語言文字
數理化公式符號
其他可見字符
不可見原子換行符
回車
制表符
空格
其他不可見的符號
字符轉義如果想查找元字符本身的話,就要使用 來取消這些字符的特殊意義
例如:. *
代碼 / 語法 | 說明 |
---|---|
| | 匹配兩個或多個分支選擇 |
[] | 匹配方括號中的任意一個原子 |
[^] | 匹配除了方括號中的原子之外的任意字符 |
代碼 / 語法 | 說明 |
---|---|
. | 匹配除換行符以外的任何字符 [^ ] |
d | 匹配數字 [0-9] |
D | 匹配非數字 [^0-9] |
s | 匹配一個不可見原子 [f v] |
S | 匹配一個可見原子 [^f v] |
w | 匹配字母或數字或下劃線 [0-9a-zA-Z_] |
W | 匹配非字母或數字或下劃線 [^0-9a-zA-Z_] |
// 匹配一個或者更多連續的數字 var pattern = /d+/; /* * 比如一個網站要求你填寫的 QQ 號必須是 5-12 位的數字時,可以使用 ^d{5,12}$ * {5,12} 表示重復次數不少于 5 次,不能多于 12 次,否則都不匹配 * 有些正則表達式處理工具還有一個處理多行的選項,如果選中了這個選項 * ^ 和 $ 的意義就變成了匹配行的開始處和結束處 */量詞
限定符 -- 指定數量的代碼
代碼 / 語法 | 說明 |
---|---|
* | 重復 0 次或更多次 |
+ | 重復一次或更多次 |
? | 重復 0 次或 1 次 |
{n} | 恰好重復 n 次 |
{n, } | 最少重復 n 次 |
{n, m} | 重復 n 次到 m 次 |
// 匹配剛好 6 個字符的單詞 var pattern = /w{6}/;邊界控制
代碼 / 語法 | 說明 |
---|---|
^ | 匹配字符串開始的位置 |
$ | 匹配字符串結尾的位置 |
匹配單詞的開始或結束 | |
B | 匹配非單詞的開始或結束 |
// 匹配以字母 a 開頭的單詞 var pattern = /aw*/; /* * 先是某個單詞的開頭處 * 然后是字母 a * 然后是任意數量的字母或數字 w* * 最后是單詞的結束處 */分組
代碼 / 語法 | 說明 |
---|---|
() | 匹配其中的整體作為原子 |
重復單個字符,直接在字符后面加上限定符就行了;
如果想要重復多個字符,可以用小括號來指定 子表達式(也叫 分組),然后可以指定這個 分組的重復次數,也可以對這個 分組進行其他的一些操作。
// 這個表達式可以匹配幾種格式的電話號碼,像 `(010)88886666`,或 `022-22334455`,或 `02912345678` 等 var pattern = /(?0d{2}[) -]?d{8}/;
首先是一個轉義字符 (,他能出現 1 次或 0 次(?)
然后是一個 0,后面跟著兩個數字 d{2},
然后是 ) 或 空格 或 - 中的一個,它出現 1 次或不出現 [) -]?
最后是 8 個數字 d{8}
修正模式修正模式可以理解成是給正則表達式的匹配過程指定一種模式。
貪婪模式 & 懶惰模式匹配結果怎么會有歧義呢?看看下面的代碼就知道了:
var pattern = /mertens.+1994/; var str = "mertens__199419941994199419941994";
上面那段代碼就是有歧義的了,看上去可以是匹配到 mertens__199419941994199419941994,也可能匹配到 mertens__1994。
貪婪:匹配結果存在歧義的時候取其長
懶惰:匹配結果存在歧義的時候取其短
未經修飾的量詞就是貪心量詞,末尾加上?則使量詞變懶惰。
// 貪婪模式 var pattern1 = /mertens.+1994/; var str = "mertens__199419941994199419941994"; var result1 = str.match(pattern1); console.log(result1); // mertens__199419941994199419941994 // 懶惰模式 var pattern2 = /mertens.+?1994/; var str = "mertens__199419941994199419941994"; var result2 = str.match(pattern2); console.log(result2); // mertens__1994后向引用
分組捕獲的內容可以在表達式或其他程序中作進一步的處理。
組號默認情況下,每個分組會自動擁有一個組號。
分配組號的規則是:從左向右,以分組的左括號為標志,第一個出現的分組的組號為 1,第二個為 2,以此類推。
后向引用用于重復搜索前面某個分組匹配的文本。
// 1 表示分組 1 匹配的某個文本 // 匹配連著的兩個重復的單詞 var pattern = /(w+)s+1/;組名
可以 指定子表達式的組名
// 可以指定組名為 Word // 使用這樣的語法:(?零寬斷言(zero-length assertions)w+) // 把尖括號換成"也行:(?"Word"w+)) // 這樣就把w+的組名指定為 Word 了 // 要反向引用這個分組捕獲的內容,可以使用 k var pattern = /(? w+) (?"Wrod"w+)/; // 上一個例子也可以寫成這樣 var pattern = /(? w+)s+k /;
使用小括號的時候,還有很多特定用途的語法:
零寬的意思是指該位置是不占寬度的,也就是只作斷言判斷,但不匹配實際的內容;
d(?=.) 這個正向先行斷言就只匹配點號之前的數字,但是它并不會匹配到這個點號,這個 d(?=.) 括號中的匹配內容也就是零寬了。零寬斷言分為四種,分別是:
正向先行(Positive Lookahead)
正向回顧(Positive Lookbehind)
負向先行(Negative Lookahead)
負向回顧(Negative Lookbehind)
正向 和 負向 的意思是斷言括號中的內容是匹配還是不匹配
先行 與 回顧 的意思是實際匹配的內容在斷言內容的前面還是后面
正向先行(Positive Lookahead)直接地說“零寬正向先行斷言”所匹配的就是 必須出現的斷言內容的前面的內容
正向回顧(Positive Lookbehind)理解了前面這個“零寬正向先行斷言”,隨之而來的就比較好理解了。依照這個邏輯,零寬正向回顧斷言所匹配的是必須出現的斷言內容之后的內容,它的語法是:(?<=...) 比如 (?<=.)w 所匹配的就是點號之后的 ASCII 字符。
負向先行(Negative Lookahead)負向與正向意思相反, 正向是斷言內容必須出現,而負向則是斷言內容必須不出現。
負向回顧(Negative Lookbehind)正負向與先行回顧的概念都已在前面列出, 負向回顧的理解應該就很順了。負向回顧的語法是:(?。 比如 (? 該正則只匹配不是 JavaScript 的 Script,它就能正確匹配 ECMAScript 和 Script。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79260.html
摘要:布爾值,表示是否設置了標志。正則表達式的字符串表示,按照字面量形式而非傳入構造函數中的字符串模式返回正則表達式的實例方法方法是否匹配基本語法參數為正則表達式為所要匹配的字符串返回值布爾值在模式與該參數匹配的情況下返回否則,返回。 高程書中對正則部分介紹的偏少,特別是元字符部分幾乎沒有介紹;我找了幾篇不錯的博客作為收錄:正則表達式30分鐘入門教程正則表達式-理論基礎篇正則表達式-基礎實戰...
摘要:的構造器經過重載可以接受多種輸出目的地,不過最常用的還是和。組號為表示整個表達式,組號表示被第一對括號括起的組,依此類推。有多個重載的構造器,可以接受和對象。 點擊進入我的博客 字符串操作是計算機程序設計中最常見的行為 13.1 不可變String String底層是由char[]實現的,是不可變的。看起來會改變String的方法,實際上都是創建了一個新的String對象,任何指向它...
摘要:本文接上篇,基礎部分相對薄弱的同學請移步正則表達式學習筆記一理論基礎。正則表達式標志符全局匹配,即找到所有匹配的。方法返回結果的格式不一致問題這個問題上文正則表達式學習筆記一理論基礎也有體現,這里再單獨拿來說一說,以加深記憶。 showImg(https://segmentfault.com/img/remote/1460000014261596?w=600&h=338); 本文接上篇...
摘要:主要知識點新增的字符串處理方法模板字面量以及正則表達式上的改動深入理解筆記目錄字符串字符串是大原始數據類型。如果在字符串的結束部分檢測到指定文本,返回,否則返回。字符串內插入反撇號的方式。 主要知識點:新增的字符串處理方法、模板字面量以及正則表達式上的改動showImg(https://segmentfault.com/img/bVbfWak?w=861&h=622); 《深入理解E...
閱讀 2294·2021-09-22 15:27
閱讀 3166·2021-09-03 10:32
閱讀 3491·2021-09-01 11:38
閱讀 2493·2019-08-30 15:56
閱讀 2206·2019-08-30 13:01
閱讀 1531·2019-08-29 12:13
閱讀 1410·2019-08-26 13:33
閱讀 885·2019-08-26 13:30