摘要:正則表達式重新整理學習,為了加深印象,發現了之前遺漏的一個非常重要的知識點優先選擇最左端的匹配結果,這個規則上創建正則的方式直接字面量的創建通過雙斜杠,在中間添加匹配的規則,這樣就是一個正則表達式了通過構造函數創建通過構造函數來創建正則對象
正則表達式
重新整理學習,為了加深印象,發現了之前遺漏的一個非常重要的知識點優先選擇最左端的匹配結果,這個規則
js上創建正則的方式
直接字面量的創建
const r = /xx/; //通過雙斜杠,在中間添加匹配的規則,這樣就是一個正則表達式了
通過構造函數創建
const r = new RegExp("xx", g) //通過構造函數來創建正則對象,第一個參數為匹配規則字符串,第二個參數可以添加修飾符,例如g,i,m,y正則的實例方法
常用的exec,可以返回一個類數組,信息比較全
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)
可以看看返回的信息有些什么?
一個元素代表:整體匹配返回的結果,如果正則中有子組匹配,那么會在index元素前返回,例如
/(a)s/g.exec("afasg") // 返回 ["as", "a", index: 2, input: "afasg", groups: undefined]
index就是匹配的索引位置信息
input就是目標字符串是什么,
groups這邊返回undefined,因為正則中沒用到;它是返回自定義名字的子匹配信息,例如
/(?a)s/g.exec("afasg") //返回 ?["as", "a", index: 2, input: "afasg", groups: {groupone: "a"}]
不常用的方法test,返回Boolean值,表示是否有匹配的字符串
正則的重要規則比較全的規則,在這
我講講幾個比較重要的,常用的
修飾符:i,m,g,y,修飾符之間可以同時使用
i就是忽略大小寫,例如驗證碼上的應用 => /a/i.test("A") //true
m就是能識別換行,也就是能判斷出行末
/a$/.test("a b") //false /a$/m.test("a b") //true
g是能進行連續的匹配,當匹配成功一次后還能繼續匹配直到沒有為止,并且可以通過lastIndex可以查看下一次匹配的開始的索引但是只對同一個正則有效,能連續指定,不然都是從零開始,這里的同一個是指內存地址相等,不是內容相等就夠了
const r = /a/g //這里通過變量r定義這樣用r進行后面的操作都會是用一個 r.lastIndex //0 r.test("asdasd") //true r.lastIndex //1
y一般和g連用,y的作用是必須從一開始就匹配上,不然就false;相當于加了個^
/a/y.test("ba") //false /a/y.test("ab") //true ,一般和g連用,進行連續頭部匹配是否成功
,B用于匹配是否是詞的邊界,不存在/wbw/它的意思就是是否存在一個是詞的邊,但前面又有一個w,明顯是不存在的(w等價于[A-Za-z0-9_])
/a/g.test("ad") //true /a/g.test("bad") //false /a/g.test("c-ad") //true B就是取反不是詞的邊界
[],()之間的區別,這兩個分成常用
[]僅僅代表一個字符串,不管里面寫多少規劃,最終還是會去匹配一個字符串
常用的有
[xyz] //代表匹配x或者y或者z [^] //等價于[^""],任意字符串 [Ss] //任意字符串 ,s是匹配空格,換行(一些帶有空格的u碼,詳細可以看鏈接) S就是匹配除了s意外的字符串
()是用于取子匹配的值,又叫元組;有時候我們整體匹配上了,但又想在里面取某個值就可以加上個括號,結果中就會幫你返回,在將exec時以及提到了,這邊不舉例了
可以和字符串的replace方法一起使用,進行負復雜的操作
const r = /he(b)/g "afdhjbkhbgd".replace(r, (match, $1) => { //match 是整體匹配的結果,$1是第一個元組返回值,當多個元組存在時是有外到里的 return xxxx })
.代表一個字符,除了空格,類似換行;還有一些大于大于0xFFFF的字符,他會認為這是兩個字符,所以用于簡單的任意字符串匹配,可用.代表
量詞
a{n}可以用來代表去匹配n個a,還可以寫區間{1,3}匹配1到3個
+,*,?這些事貪婪匹配的量詞,就是數量往大了取,不固定,但又范圍+ //[1, Infinity] * //[0, Infinity] ? //[0, 1]
如果在其后面再添加個?就是非貪婪匹配了,取值就盡量往小了取
非貪婪匹配的作用在哪,可以通過一個簡單的例子看一下
//如果要匹配字符換"caabaaab" ,如果只想取aab就會用到非貪婪匹配 通過/a+?b/g來匹配;用?來指定非貪婪匹配,加上b的限制,不會取到1;這邊用+還是*是一樣的
強大的斷言
可以理解成你是用于匹配的規則但不是我想要輸出的內容
非捕獲組
用?:表示;說直白點就是:還是這么匹配但是我不返回括號里的內容,所以我們進行split的組匹配時可以進行修改console.log("abc".split(/(?:b)/)); //["a", "c"]
先行斷言
用x(?=y)表示,意思是匹配一個x,x必須在y前面,結果中不返回y
先行否定斷言
用x(?!y)表示,意思是匹配一個x,x后面不能是y,結果中不返回y
后行斷言
用(?<=y)x表示,意思是匹配一個x,x前面必須是y,結果中不返回y
后行否定斷言
用(?表示,意思是匹配一個x,x前面不能是y,結果中不返回y
console.log(/(? 最重要最優先的規則
優先選擇最左端的匹配結果
可以通過幾個例子自證一下/a+?b/.exec("baaabab") //結果["aaab", index: 1, input: "baaabab", groups: undefined],因為先匹配上了aaab,所以忽略非貪婪原則不輸出ab或者b /a*?/.exec("baaa") //返回["", index: 0, input: "baaa", groups: undefined] 因為先匹配上了空串所以結果為空串常見的正則例子去除首尾空格 " fds df ".replace(/^s*|s*$/g, "")
去除首尾空格 " fds df ".replace(/s*(?=S*)/g, "")
千分位數字格式化 "1234567890".replace(/B(?=((d{3})+$))/g, ".");
如果有小數, ("1234567890.123").replace(/B(?=((d{3})+.))/g, ",")
合并兩者: ("1234567890.213").replace(/B(?=((d{3})+(.d+)?$))/g, ",")`
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108889.html
摘要:表示行的結束,表示必須以數字結束。用表示的就是要提取的分組。方法在匹配成功后,會返回一個,第一個元素是正則表達式匹配到的整個字符串,后面的字符串表示匹配成功的子串。貪婪匹配需要特別指出的是,正則匹配默認是貪婪匹配,也就是匹配盡可能多的字符。 對象 typeof 123; // number typeof NaN; // number typeof str; // string type...
摘要:屬性一類是修飾符相關,返回一個布爾值,表示對應的修飾符是否設置返回一個布爾值,指忽略大小寫,注意僅是忽略大小寫,并不忽略全半角,該屬性只讀。 因為沒有系統的總結過正則表達式,工作中用到的也不到,主要靠百度現成的加改改不知道怎么就成功了,決心好好的學習一下正則表達式 新建正則表達式 使用字面量,以斜杠表示開始和結束 var regex = /s+/g; 使用RegExp構造函數 ...
摘要:說到底還是練習的不夠多,一直處于只看不做的程度上。所以搜集了這些正則習題,來保證溫故而知新。本文不講基礎,只記錄習題,如果后續有新的題目,也會保持更新。 正則表達式,有木有人像我一樣,學了不知道多少遍,學的時候看起來都懂了,過一段時間就又忘的差不多了,等真正要用到的時候,還是一臉懵逼。說到底還是練習的不夠多,一直處于只看不做的程度上。所以搜集了這些正則習題,來保證溫故而知新。建議讀者看...
摘要:的對象表示正則表達式,而和都定義了使用正則表達式進行強大的模式匹配和文本檢索與替換的函數。對象也提供了個使用正則表達式的方法。如正則表達式將匹配除了和所有大寫字母之外的任何字符。 前端學習:教程&開發模塊化/規范化/工程化/優化&工具/調試&值得關注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:正則表達式 JavaScript-正則表達式 正則表達式簡述 正則表達式(re...
摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入匯總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應和斧正,會及時更新,平時業務工作時也會不定期更...
閱讀 2742·2021-11-24 10:23
閱讀 1153·2021-11-17 09:33
閱讀 2503·2021-09-28 09:41
閱讀 1409·2021-09-22 15:55
閱讀 3641·2019-08-29 16:32
閱讀 1903·2019-08-29 16:25
閱讀 1056·2019-08-29 11:06
閱讀 3421·2019-08-29 10:55