摘要:正則表達(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
摘要:表示行的結(jié)束,表示必須以數(shù)字結(jié)束。用表示的就是要提取的分組。方法在匹配成功后,會(huì)返回一個(gè),第一個(gè)元素是正則表達(dá)式匹配到的整個(gè)字符串,后面的字符串表示匹配成功的子串。貪婪匹配需要特別指出的是,正則匹配默認(rèn)是貪婪匹配,也就是匹配盡可能多的字符。 對(duì)象 typeof 123; // number typeof NaN; // number typeof str; // string type...
摘要:屬性一類是修飾符相關(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ù) ...
摘要:說到底還是練習(xí)的不夠多,一直處于只看不做的程度上。所以搜集了這些正則習(xí)題,來保證溫故而知新。本文不講基礎(chǔ),只記錄習(xí)題,如果后續(xù)有新的題目,也會(huì)保持更新。 正則表達(dá)式,有木有人像我一樣,學(xué)了不知道多少遍,學(xué)的時(shí)候看起來都懂了,過一段時(shí)間就又忘的差不多了,等真正要用到的時(shí)候,還是一臉懵逼。說到底還是練習(xí)的不夠多,一直處于只看不做的程度上。所以搜集了這些正則習(xí)題,來保證溫故而知新。建議讀者看...
摘要:的對(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...
摘要:特意對(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ì)不定期更...
閱讀 2856·2021-11-24 10:23
閱讀 1216·2021-11-17 09:33
閱讀 2595·2021-09-28 09:41
閱讀 1514·2021-09-22 15:55
閱讀 3703·2019-08-29 16:32
閱讀 2004·2019-08-29 16:25
閱讀 1113·2019-08-29 11:06
閱讀 3481·2019-08-29 10:55