摘要:通過(guò)學(xué)習(xí)課程正則表達(dá)式對(duì)視頻教學(xué)內(nèi)容做一個(gè)知識(shí)整理。理解這個(gè)請(qǐng)看下面方法正則表達(dá)式的源文本。簡(jiǎn)單的就是找到匹配字符的開始位置找到一個(gè)或多個(gè)正則表達(dá)式的匹配。與有些許相似,只是返回的內(nèi)容更加細(xì)節(jié)替換與正則表達(dá)式匹配的子串。
通過(guò)學(xué)習(xí)imooc課程《JavaScript正則表達(dá)式》對(duì)視頻教學(xué)內(nèi)容做一個(gè)知識(shí)整理。視頻源地址:http://www.imooc.com/video/12539
一個(gè)正則表達(dá)式在線工具:http://regexper.com
JavaScript 通過(guò)內(nèi)置對(duì)象RegExp支持正則表達(dá)式,有兩種方法實(shí)例化RegExp對(duì)象:
字面量 eg: var reg = /bisb/g;
構(gòu)造函數(shù) eg: var reg = new RegExp("/bisb/","g" );
1.修飾符g:global全文搜索,不添加,搜索到第一個(gè)匹配停止;
i:ignore case忽略大小寫;
m:multiple lines多行搜索;
2.元字符正則表達(dá)式有兩種基本字符類型組成:
原義文本字符,即要找什么就是什么,要找a就直接寫a,找123就直接寫123;
元字符,有特殊含義的非字母字符:* ? + $ ^ . | ( ) { } [ ];
其他的還有:
一般情況正則表達(dá)式一個(gè)字符對(duì)應(yīng)字符串一個(gè)字符,eg 表達(dá)式abt含義是 "ab" tab制表符;一般由元字符 [ ] 來(lái)構(gòu)建一個(gè)簡(jiǎn)單的類,不是特指某個(gè)字符,eg [abc]把字符a或b或c歸為一類;在[ ]里面加 ^ 表示取反,eg 1代表不要有a或b或c;
4.范圍類用[a-zA-Z0-9]來(lái)代表a到z或A到Z貨0到9中任意字符;
5.預(yù)定義類 6.量詞再有很常用的 ^n 匹配任何開頭為 n 的字符串 ; n$匹配任何結(jié)尾為 n 的字符串。
還有一個(gè)易混淆的,?=n 匹配任何其后緊接指定字符串 n 的字符串。就是說(shuō)要找到的這個(gè)字符后面一定要跟字符n
var reg = "a1b1c1ddeeff"; reg.replace(/w(?=d)/g,"Y");
結(jié)果是"Y1Y1Y1ddeeff" ;
與之相反的就是 !?=n;
正則表達(dá)式在默認(rèn)下是盡可能多的匹配,eg "123456789".replace(/d{2,5}/g,"X"); 結(jié)果是X6789,默認(rèn)貪婪模式,以{2,5}范圍中最大的為標(biāo)準(zhǔn)匹配。
要設(shè)置成非貪婪模式可以"123456789".replace(/d{2,5}?/g,"X");結(jié)果為XXXX9,即按{2,5}中最小的2來(lái)匹配,12,34,56,78都匹配成功變成X,剩下9沒有匹配成功
8.分組使用()可以達(dá)到分組功能,使量詞作用于分組,eg "a1b1c1d2".replace(/[a-z]d{3}/g,"x");這里{3}是直接作用與最接近的d,即找[a-z]然后連續(xù)出現(xiàn)3個(gè)數(shù)字,"a1b1c1d2".replace(/([a-z]d){3}/g,"x");這樣就能找到連續(xù)出現(xiàn)三次(一個(gè)字母加一個(gè)數(shù)字),就是"a1b1c1"這個(gè)字符串了;
9.對(duì)象屬性global(只可讀,不可寫)
ignoreCase(只可讀,不可寫)
multiline(只可讀,不可寫)
lastIndex 一個(gè)整數(shù),標(biāo)示開始下一次匹配的字符位置。(理解這個(gè)請(qǐng)看下面方法test())
source 正則表達(dá)式的源文本。
10.方法test() 檢索字符串中指定的值。返回 true 或 false。
exec() 檢索字符串中指定的值。返回找到的值,并確定其位置。
compile() 編譯正則表達(dá)式。
test(): eg var reg = /w/g; reg.test("ab");結(jié)果是true,但多執(zhí)行幾次會(huì)發(fā)現(xiàn)
最后一個(gè)結(jié)果變成false,這其實(shí)和RegExp屬性lastIndex有關(guān),
var reg = /w/g; while(reg.test("ab")){ console.log(reg.lastIndex); }
結(jié)果是1,2,這是因?yàn)榈谝淮蝨est會(huì)匹配到a,這時(shí)lastIndex就是這個(gè)字符a的下一位,即b的位置1,接著test還會(huì)繼續(xù)向后面匹配,輪到這個(gè)b,這是lastIndex就是b后面的位置2,之后會(huì)重置為0,從頭開始循環(huán)。要避免這種test出現(xiàn)不穩(wěn)定輸出,可以直接/w/g.test("ab");
exec() :返回一個(gè)數(shù)組,其中存放匹配的結(jié)果。如果未找到匹配,則返回值為 null。借用w3school上的話,如果 exec() 找到了匹配的文本,則返回一個(gè)結(jié)果數(shù)組。否則,返回 null。此數(shù)組的第 0 個(gè)元素是與正則表達(dá)式相匹配的文本,第 1 個(gè)元素是與 RegExpObject 的第 1 個(gè)子表達(dá)式相匹配的文本(如果有的話),第 2 個(gè)元素是與 RegExpObject 的第 2 個(gè)子表達(dá)式相匹配的文本(如果有的話),以此類推。
看代碼:
var reg = /d(w)(w)d/; var str = "1ax2by3cz4d5e"; var ret = reg.exec(str); console.log(ret);
輸出:["1ax2", "a", "x"]
這里返回的數(shù)組第一個(gè)就是匹配到的1a2,然后第二和第三個(gè)數(shù)組就是1a2中間的a和x,因?yàn)?d(w)d/里面的子表達(dá)式就是(w)(w);
同樣的來(lái)看正則對(duì)象的lastIndex屬性,以及匹配結(jié)果的數(shù)組的index屬性:
var reg = /d(w)(w)d/g; var str = "$1ax2by3cz4dd5ee"; while(ret = reg.exec(str)){ console.log(reg.lastIndex + " " + ret.index + " " + ret); }
輸出:
"5 1 1ax2,a,x"
"11 7 3cz4,c,z"
第一個(gè):5,指第一次匹配后reg對(duì)象的lastIndex(紅色后面的位置),1指的是exec()方法返回的位置,$后面開始匹配到的,所以是1;
第二個(gè):11,指第一次匹配后reg對(duì)象的lastIndex(藍(lán)色后面的位置),7指exec()方法返回的位置,y后面開始匹配到的,所以是7;
compile():我的理解是可以修改正則表達(dá)式,看代碼
function CompileDemo(){ var rs; var s = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPp" var r = new RegExp("[A-Z]", "g"); var a1 = s.match(r); r.compile("[a-z]", "g"); var a2 = s.match(r); return(a1 + " " + a2); } console.log(CompileDemo());
輸出:
"A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P
a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p"
search() 檢索與正則表達(dá)式相匹配的值。(簡(jiǎn)單的就是找到匹配字符的開始位置)
match() 找到一個(gè)或多個(gè)正則表達(dá)式的匹配。(與exec()有些許相似,只是exec()返回的內(nèi)容更加細(xì)節(jié))
replace() 替換與正則表達(dá)式匹配的子串。(這個(gè)不多說(shuō))
split() 把字符串分割為字符串?dāng)?shù)組。(這個(gè)也容易,就是注意別忘了)
(這里要注意10 和 11 是完全對(duì)應(yīng)不同對(duì)象的方法,一個(gè)是RegExp對(duì)象的方法,一個(gè)是String對(duì)象的方法)
這部分主要在JavaScript string對(duì)象部分有學(xué)習(xí)到,可以參考http://www.w3school.com.cn/js...
abc ?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/87395.html
摘要:本文內(nèi)容共正則表達(dá)式火拼系列正則表達(dá)式回溯法原理學(xué)習(xí)正則表達(dá)式,是需要懂點(diǎn)兒匹配原理的。正則表達(dá)式迷你書問(wèn)世了讓幫你生成和解析參數(shù)字符串最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對(duì)字符串執(zhí)行模式匹配。 JS 的正則表達(dá)式 正則表達(dá)式 一種幾乎可以在所有的程序設(shè)計(jì)語(yǔ)言里和所有的計(jì)算機(jī)平臺(tái)上使用的文字處理工具。它可以用來(lái)查找特定的信息(搜索),也可以用來(lái)查...
摘要:介紹這周開始學(xué)習(xí)老姚大佬的正則表達(dá)式迷你書,然后習(xí)慣性的看完一遍后,整理一下知識(shí)點(diǎn),便于以后自己重新復(fù)習(xí)。感謝原書作者老姚,本文無(wú)意抄襲,只是作為自己知識(shí)點(diǎn)的整理,后續(xù)也會(huì)整理到自己的知識(shí)庫(kù)網(wǎng)站中。等價(jià)于,表示出現(xiàn)次。 showImg(https://segmentfault.com/img/remote/1460000018530584?w=919&h=449); 介紹 這周開始學(xué)習(xí)...
摘要:個(gè)人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現(xiàn)在已經(jīng)一年的時(shí)間了,由于工作比較忙,更新緩慢,后面還是會(huì)繼更新,現(xiàn)將已經(jīng)寫好的文章整理一個(gè)目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個(gè)人前端文章整理 從最開始萌生寫文章的想法,到著手...
摘要:那些瑣碎的知識(shí)點(diǎn)作者記錄的的很奇特很難記的知識(shí)點(diǎn)。易錯(cuò)知識(shí)點(diǎn)整理注意和的區(qū)別中和都是輸出的作用,但是兩者之間還是有細(xì)微的差別。今天手頭不忙,總結(jié)一下,分享過(guò)程中掌握的知識(shí)點(diǎn)。 深入理解 PHP 之:Nginx 與 FPM 的工作機(jī)制 這篇文章從 Nginx 與 FPM 的工作機(jī)制出發(fā),探討配置背后的原理,讓我們真正理解 Nginx 與 PHP 是如何協(xié)同工作的。 PHP 那些瑣碎的知識(shí)...
閱讀 4075·2021-09-06 15:00
閱讀 2238·2019-08-30 15:53
閱讀 3355·2019-08-23 16:44
閱讀 1016·2019-08-23 15:19
閱讀 1472·2019-08-23 12:27
閱讀 4273·2019-08-23 11:30
閱讀 673·2019-08-23 10:33
閱讀 440·2019-08-22 16:05