亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JavaScript正則表達(dá)式知識(shí)整理

myeveryheart / 469人閱讀

摘要:通過(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;
元字符,有特殊含義的非字母字符:* ? + $ ^ . | ( ) { } [ ];
其他的還有:

3.元字符

一般情況正則表達(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;

7.貪婪模式、非貪婪模式

正則表達(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"

11.支持正則表達(dá)式的 String 對(duì)象的方法

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

相關(guān)文章

  • 正則達(dá)式

    摘要:本文內(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)查...

    bang590 評(píng)論0 收藏0
  • JavaScript 正則達(dá)式迷你書》知識(shí)點(diǎn)小抄本

    摘要:介紹這周開始學(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í)...

    zollero 評(píng)論0 收藏0
  • 【連載】前端個(gè)人文章整理-從基礎(chǔ)到入門

    摘要:個(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è)人前端文章整理 從最開始萌生寫文章的想法,到著手...

    madthumb 評(píng)論0 收藏0
  • PHP小知識(shí)點(diǎn)

    摘要:那些瑣碎的知識(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í)...

    hover_lew 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<