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