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