成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

正則表達(dá)式-溫故而知新

snowell / 1488人閱讀

摘要:正則表達(dá)式重新整理學(xué)習(xí),為了加深印象,發(fā)現(xiàn)了之前遺漏的一個(gè)非常重要的知識(shí)點(diǎn)優(yōu)先選擇最左端的匹配結(jié)果,這個(gè)規(guī)則上創(chuàng)建正則的方式直接字面量的創(chuàng)建通過雙斜杠,在中間添加匹配的規(guī)則,這樣就是一個(gè)正則表達(dá)式了通過構(gòu)造函數(shù)創(chuàng)建通過構(gòu)造函數(shù)來創(chuàng)建正則對(duì)象

正則表達(dá)式

重新整理學(xué)習(xí),為了加深印象,發(fā)現(xiàn)了之前遺漏的一個(gè)非常重要的知識(shí)點(diǎn)優(yōu)先選擇最左端的匹配結(jié)果,這個(gè)規(guī)則

js上創(chuàng)建正則的方式

直接字面量的創(chuàng)建

const r = /xx/;    //通過雙斜杠,在中間添加匹配的規(guī)則,這樣就是一個(gè)正則表達(dá)式了

通過構(gòu)造函數(shù)創(chuàng)建

const r = new RegExp("xx", g)  //通過構(gòu)造函數(shù)來創(chuàng)建正則對(duì)象,第一個(gè)參數(shù)為匹配規(guī)則字符串,第二個(gè)參數(shù)可以添加修飾符,例如g,i,m,y

正則的實(shí)例方法

常用的exec,可以返回一個(gè)類數(shù)組,信息比較全

const r = /a/g
r.exec("asd")   //返回["a", index: 0, input: "asd", groups: undefined]0: "a"groups: undefinedindex: 0input: "asd"length: 1__proto__: Array(0)

可以看看返回的信息有些什么?

一個(gè)元素代表:整體匹配返回的結(jié)果,如果正則中有子組匹配,那么會(huì)在index元素前返回,例如

/(a)s/g.exec("afasg")  // 返回 ["as", "a", index: 2, input: "afasg", groups: undefined]

index就是匹配的索引位置信息

input就是目標(biāo)字符串是什么,

groups這邊返回undefined,因?yàn)檎齽t中沒用到;它是返回自定義名字的子匹配信息,例如

/(?a)s/g.exec("afasg")
//返回 ?["as", "a", index: 2, input: "afasg", groups: {groupone: "a"}]

不常用的方法test,返回Boolean值,表示是否有匹配的字符串

正則的重要規(guī)則

比較全的規(guī)則,在這

我講講幾個(gè)比較重要的,常用的

修飾符:i,m,g,y,修飾符之間可以同時(shí)使用
i就是忽略大小寫,例如驗(yàn)證碼上的應(yīng)用 => /a/i.test("A") //true
m就是能識(shí)別換行,也就是能判斷出行末

/a$/.test("a
b")  //false 
/a$/m.test("a
b")  //true

g是能進(jìn)行連續(xù)的匹配,當(dāng)匹配成功一次后還能繼續(xù)匹配直到?jīng)]有為止,并且可以通過lastIndex可以查看下一次匹配的開始的索引但是只對(duì)同一個(gè)正則有效,能連續(xù)指定,不然都是從零開始,這里的同一個(gè)是指內(nèi)存地址相等,不是內(nèi)容相等就夠了

const r = /a/g      //這里通過變量r定義這樣用r進(jìn)行后面的操作都會(huì)是用一個(gè)
r.lastIndex         //0
r.test("asdasd")    //true
r.lastIndex         //1

y一般和g連用,y的作用是必須從一開始就匹配上,不然就false;相當(dāng)于加了個(gè)^

/a/y.test("ba")  //false
/a/y.test("ab")  //true ,一般和g連用,進(jìn)行連續(xù)頭部匹配是否成功

,B用于匹配是否是詞的邊界,不存在/wbw/它的意思就是是否存在一個(gè)是詞的邊,但前面又有一個(gè)w,明顯是不存在的(w等價(jià)于[A-Za-z0-9_])

/a/g.test("ad") //true 
/a/g.test("bad") //false
/a/g.test("c-ad") //true  
B就是取反不是詞的邊界

[],()之間的區(qū)別,這兩個(gè)分成常用
[]僅僅代表一個(gè)字符串,不管里面寫多少規(guī)劃,最終還是會(huì)去匹配一個(gè)字符串
常用的有

[xyz]   //代表匹配x或者y或者z
[^]     //等價(jià)于[^""],任意字符串
[Ss]  //任意字符串   ,s是匹配空格,換行(一些帶有空格的u碼,詳細(xì)可以看鏈接) S就是匹配除了s意外的字符串

()是用于取子匹配的值,又叫元組;有時(shí)候我們整體匹配上了,但又想在里面取某個(gè)值就可以加上個(gè)括號(hào),結(jié)果中就會(huì)幫你返回,在將exec時(shí)以及提到了,這邊不舉例了
可以和字符串的replace方法一起使用,進(jìn)行負(fù)復(fù)雜的操作

const r = /he(b)/g
"afdhjbkhbgd".replace(r, (match, $1) => {
    //match 是整體匹配的結(jié)果,$1是第一個(gè)元組返回值,當(dāng)多個(gè)元組存在時(shí)是有外到里的
    return xxxx
})

.代表一個(gè)字符,除了空格,類似換行;還有一些大于大于0xFFFF的字符,他會(huì)認(rèn)為這是兩個(gè)字符,所以用于簡(jiǎn)單的任意字符串匹配,可用.代表

量詞
a{n}可以用來代表去匹配n個(gè)a,還可以寫區(qū)間{1,3}匹配1到3個(gè)
+,*,?這些事貪婪匹配的量詞,就是數(shù)量往大了取,不固定,但又范圍+ //[1, Infinity] * //[0, Infinity] ? //[0, 1]

如果在其后面再添加個(gè)?就是非貪婪匹配了,取值就盡量往小了取
非貪婪匹配的作用在哪,可以通過一個(gè)簡(jiǎn)單的例子看一下

//如果要匹配字符換"caabaaab" ,如果只想取aab就會(huì)用到非貪婪匹配 通過/a+?b/g來匹配;用?來指定非貪婪匹配,加上b的限制,不會(huì)取到1;這邊用+還是*是一樣的

強(qiáng)大的斷言
可以理解成你是用于匹配的規(guī)則但不是我想要輸出的內(nèi)容

非捕獲組
?:表示;說直白點(diǎn)就是:還是這么匹配但是我不返回括號(hào)里的內(nèi)容,所以我們進(jìn)行split的組匹配時(shí)可以進(jìn)行修改console.log("abc".split(/(?:b)/)); //["a", "c"]

先行斷言
x(?=y)表示,意思是匹配一個(gè)x,x必須在y前面,結(jié)果中不返回y

先行否定斷言
x(?!y)表示,意思是匹配一個(gè)x,x后面不能是y,結(jié)果中不返回y

后行斷言
(?<=y)x表示,意思是匹配一個(gè)x,x前面必須是y,結(jié)果中不返回y

后行否定斷言
(?表示,意思是匹配一個(gè)x,x前面不能是y,結(jié)果中不返回y

console.log(/(?

最重要最優(yōu)先的規(guī)則

優(yōu)先選擇最左端的匹配結(jié)果
可以通過幾個(gè)例子自證一下

/a+?b/.exec("baaabab")    
//結(jié)果["aaab", index: 1, input: "baaabab", groups: undefined],因?yàn)橄绕ヅ渖狭薬aab,所以忽略非貪婪原則不輸出ab或者b

/a*?/.exec("baaa")
//返回["", index: 0, input: "baaa", groups: undefined]  因?yàn)橄绕ヅ渖狭丝沾越Y(jié)果為空串

常見的正則例子

去除首尾空格 " fds df ".replace(/^s*|s*$/g, "")

去除首尾空格 " fds df ".replace(/s*(?=S*)/g, "")

千分位數(shù)字格式化 "1234567890".replace(/B(?=((d{3})+$))/g, ".");
如果有小數(shù), ("1234567890.123").replace(/B(?=((d{3})+.))/g, ",")
合并兩者: ("1234567890.213").replace(/B(?=((d{3})+(.d+)?$))/g, ",")

`

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/108889.html

相關(guān)文章

  • js溫故知新5——學(xué)習(xí)廖雪峰的js教程

    摘要:表示行的結(jié)束,表示必須以數(shù)字結(jié)束。用表示的就是要提取的分組。方法在匹配成功后,會(huì)返回一個(gè),第一個(gè)元素是正則表達(dá)式匹配到的整個(gè)字符串,后面的字符串表示匹配成功的子串。貪婪匹配需要特別指出的是,正則匹配默認(rèn)是貪婪匹配,也就是匹配盡可能多的字符。 對(duì)象 typeof 123; // number typeof NaN; // number typeof str; // string type...

    mayaohua 評(píng)論0 收藏0
  • 溫故知新之javascript正則

    摘要:屬性一類是修飾符相關(guān),返回一個(gè)布爾值,表示對(duì)應(yīng)的修飾符是否設(shè)置返回一個(gè)布爾值,指忽略大小寫,注意僅是忽略大小寫,并不忽略全半角,該屬性只讀。 因?yàn)闆]有系統(tǒng)的總結(jié)過正則表達(dá)式,工作中用到的也不到,主要靠百度現(xiàn)成的加改改不知道怎么就成功了,決心好好的學(xué)習(xí)一下正則表達(dá)式 新建正則表達(dá)式 使用字面量,以斜杠表示開始和結(jié)束 var regex = /s+/g; 使用RegExp構(gòu)造函數(shù) ...

    Backache 評(píng)論0 收藏0
  • 面試中會(huì)遇到的正則

    摘要:說到底還是練習(xí)的不夠多,一直處于只看不做的程度上。所以搜集了這些正則習(xí)題,來保證溫故而知新。本文不講基礎(chǔ),只記錄習(xí)題,如果后續(xù)有新的題目,也會(huì)保持更新。 正則表達(dá)式,有木有人像我一樣,學(xué)了不知道多少遍,學(xué)的時(shí)候看起來都懂了,過一段時(shí)間就又忘的差不多了,等真正要用到的時(shí)候,還是一臉懵逼。說到底還是練習(xí)的不夠多,一直處于只看不做的程度上。所以搜集了這些正則習(xí)題,來保證溫故而知新。建議讀者看...

    Nekron 評(píng)論0 收藏0
  • 溫故js系列(5)-正則表達(dá)&常用代碼

    摘要:的對(duì)象表示正則表達(dá)式,而和都定義了使用正則表達(dá)式進(jìn)行強(qiáng)大的模式匹配和文本檢索與替換的函數(shù)。對(duì)象也提供了個(gè)使用正則表達(dá)式的方法。如正則表達(dá)式將匹配除了和所有大寫字母之外的任何字符。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:正則表達(dá)式 JavaScript-正則表達(dá)式 正則表達(dá)式簡(jiǎn)述 正則表達(dá)式(re...

    glumes 評(píng)論0 收藏0
  • 前端資源系列(4)-前端學(xué)習(xí)資源分享&前端面試資源匯總

    摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...

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

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

0條評(píng)論

閱讀需要支付1元查看
<