成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

正則表達(dá)式基礎(chǔ)筆記

Enlightenment / 1862人閱讀

摘要:參考資料慕課網(wǎng)鬼斧神工之正則表達(dá)式正則表達(dá)式后向引用詳解正則表達(dá)式分鐘入門教程什么是正則表達(dá)式正則表達(dá)式是字符串的搜索和匹配的工具。貪婪模式懶惰模式后向引用分組捕獲的內(nèi)容可以在表達(dá)式或其他程序中作進(jìn)一步的處理。

參考資料

慕課網(wǎng)-鬼斧神工之正則表達(dá)式
正則表達(dá)式后向引用詳解
正則表達(dá)式30分鐘入門教程

什么是正則表達(dá)式?

正則表達(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
// 使用這樣的語法:(?w+)
// 把尖括號換成"也行:(?"Word"w+))
// 這樣就把w+的組名指定為 Word 了
// 要反向引用這個分組捕獲的內(nèi)容,可以使用 k
var pattern = /(?w+) (?"Wrod"w+)/;

// 上一個例子也可以寫成這樣
var pattern = /(?w+)s+k/;
零寬斷言(zero-length assertions)

使用小括號的時候,還有很多特定用途的語法:

零寬的意思是指該位置是不占寬度的,也就是只作斷言判斷,但不匹配實(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

相關(guān)文章

  • 《javascript高級程序設(shè)計》筆記正則達(dá)式

    摘要:布爾值,表示是否設(shè)置了標(biāo)志。正則表達(dá)式的字符串表示,按照字面量形式而非傳入構(gòu)造函數(shù)中的字符串模式返回正則表達(dá)式的實(shí)例方法方法是否匹配基本語法參數(shù)為正則表達(dá)式為所要匹配的字符串返回值布爾值在模式與該參數(shù)匹配的情況下返回否則,返回。 高程書中對正則部分介紹的偏少,特別是元字符部分幾乎沒有介紹;我找了幾篇不錯的博客作為收錄:正則表達(dá)式30分鐘入門教程正則表達(dá)式-理論基礎(chǔ)篇正則表達(dá)式-基礎(chǔ)實(shí)戰(zhàn)...

    ingood 評論0 收藏0
  • 《Java編程思想》筆記13.字符串

    摘要:的構(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對象,任何指向它...

    since1986 評論0 收藏0
  • JavaScript正則達(dá)式學(xué)習(xí)筆記(二) - 打怪升級

    摘要:本文接上篇,基礎(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); 本文接上篇...

    Jioby 評論0 收藏0
  • 深入理解ES6筆記(二)字符串和正則表達(dá)

    摘要:主要知識點(diǎn)新增的字符串處理方法模板字面量以及正則表達(dá)式上的改動深入理解筆記目錄字符串字符串是大原始數(shù)據(jù)類型。如果在字符串的結(jié)束部分檢測到指定文本,返回,否則返回。字符串內(nèi)插入反撇號的方式。 主要知識點(diǎn):新增的字符串處理方法、模板字面量以及正則表達(dá)式上的改動showImg(https://segmentfault.com/img/bVbfWak?w=861&h=622); 《深入理解E...

    TANKING 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<