摘要:基礎(chǔ)語(yǔ)法鞏固正則表達(dá)式引擎根據(jù)正則去匹配字符的時(shí)候,是通過(guò)檢查索引的方式。妻原配就是好,可以直接使用正則表達(dá)式調(diào)用它。下面解釋一下上面這些常用的元字符查找單個(gè)字符,除了換行和行結(jié)束符。正則系列文章整理到了
上一章內(nèi)容:正則表達(dá)式實(shí)戰(zhàn)篇
知識(shí)回顧前2章分別學(xué)習(xí)了正則表達(dá)式入門技巧,以及遇到正則需求該如何去分析問(wèn)題,還有正則表達(dá)式實(shí)戰(zhàn)的一些場(chǎng)景解釋。
這一章內(nèi)容偏向理論,推薦你點(diǎn)擊開(kāi)頭的鏈接前往前2章節(jié)學(xué)習(xí)一下入門技巧,然后再看這一章內(nèi)容,就不會(huì)那么迷茫了。我一向相信工程師要先學(xué)會(huì)做事,才能學(xué)懂理論,先學(xué)理論,再學(xué)做事的通常是紙上談兵,一遇到實(shí)戰(zhàn)就懵逼。
基礎(chǔ)語(yǔ)法鞏固正則表達(dá)式引擎根據(jù)正則去匹配字符的時(shí)候,是通過(guò)檢查索引的方式。
RegExp構(gòu)造函數(shù)JavaScript正則表達(dá)式有2種寫法:比較常用的是第二種,第一種寫法在一些replace替換時(shí)涉及到變量的時(shí)候,可能會(huì)用到,后面例子如果有這個(gè)需求,再說(shuō)。
1、RegExp
下面其實(shí)是同一種寫法,一個(gè)用 "正則",一個(gè)是用 /正則/,注意使用字符串寫法的時(shí)候,特殊字符要進(jìn)行轉(zhuǎn)義。
var r = new RegExp("d+", "g") //r.test("123") true //或者是 var r = new RegExp(/d+/, "g") //r.test("123") true
如果你沒(méi)有轉(zhuǎn)義特殊字符,那么正則就是錯(cuò)的,比如:
//我錯(cuò)了 var r = new RegExp("d+", "g") //r.test("123") false
2、/正則/
你還可以直接使用 /正則/ 的寫法。
/d+/g.test("123") // true
和RegExp有關(guān)的幾個(gè)方法,compile()、exec()、test(),與之相對(duì)于的是search()、match()、replace()、split(),為了好記,我把她們叫做 “3妻4妾”。
3妻是RegExp的原配方法,4妾是字符串方法。
1、3妻
原配就是好,可以直接使用正則表達(dá)式調(diào)用它。
var r = /2/ r.compile(r) //重新編譯正則,這個(gè)不太常用 r.exec("123") //獲取正則匹配的字符所在的位置 r.test("123") //最受歡迎的妻子,判斷字符串是否符合某個(gè)正則,true 或者 false
2、4妾
4妾不是RegExp的方法,而是字符串的方法。在控制臺(tái)輸入 "".__proto__ ,就能看到字符串原型中的這4個(gè)方法,又因?yàn)樗齻兌己驼齽t有關(guān),所以叫做RegExp的4個(gè)小妾。
var r = /2/ "123".search(r) //返回匹配字符的位置,范圍是0-n,如果不存在,則返回-1。 "123".match(r) //返回?cái)?shù)組,這個(gè)方法常用在提取字符串中的某些字符。 "123".replace(r, "4") //最基本的用法是替換正則匹配到的字符串,還有一種高級(jí)用法,后面再講。 "123".split(r) //表示切割字符串,這里把2切割出來(lái),"123"變成了["1", "3"]. //通常我們用它來(lái)切割字符串里面的空格或者回車符,然后再map渲染。 "1 2 3".split(/[s ]/g).map(v => v) //["1", "2", "3"].map()修飾符
JavaScript中常用的修飾符有3種,i、g、m,g你可能經(jīng)常看得到。
"Aasb".match(/a/i) //i表示忽略大小寫,匹配出來(lái)的是第一個(gè)A "Aasb".match(/a/ig) //想要匹配所有的a,就需要加上g全局搜索 ["A", "a"] m: 多行匹配,具體用法不了解元字符
“元”的含義是元始天尊,“元字符”是元始天尊制造的一個(gè)個(gè)基礎(chǔ)符文,用這些基礎(chǔ)符文可以組合出各種高級(jí)的正則表達(dá)式。
.:查找單個(gè)字符,除了換行和行結(jié)束符。 w:查找字母和數(shù)字。 d:查找數(shù)字。 D:查找非數(shù)字字符。 s:查找空白字符。 S:查找非空白字符。 :匹配單詞邊界。 B:匹配非單詞邊界。 :查找換行符。 f:查找換頁(yè)符。 :查找回車符。 :查找制表符。 v:查找垂直制表符。
下面解釋一下上面這些常用的元字符
查找單個(gè)字符,除了換行和行結(jié)束符。
換行符你可能知道,但是結(jié)束符是什么?在一個(gè)字符串最后,你肉眼看不到的地方,有一個(gè)結(jié)束符號(hào),在101網(wǎng)站使用 /.*/ 測(cè)試一下就能看到了
"第一段 第二段".match(/./g) //["第", "一", "段", "第", "二", "段"] //使用.+之后,匹配出來(lái)的效果就和split切割一樣了。 "第一段 第二段".match(/.+/g) //["第一段", "第二段"]
查找字母和數(shù)字
"aA1".match(/w/g) // ["a", "A", "1"] "aA1".match(/w+/g) // ["aA1"]
其他字符自己去101網(wǎng)站測(cè)試玩一下,很有趣的。
括號(hào)內(nèi)的正則我們經(jīng)常看得到 []、()、{}這幾種括號(hào)穿插在正則表達(dá)式中,讓人眼花繚亂。但它的本質(zhì)非常簡(jiǎn)單,很好理解。你需要注意 [^abc]中的 ^ 和寫在/^abc$/的作用是不同的。
[abc]:查找方括號(hào)之間的任何字符。 [^abc]:查找任何不在方括號(hào)之間的字符。 [0-9]:查找任何從 0 至 9 的數(shù)字。 ([0-9]|d):查找任何指定的選項(xiàng)。 [0-9]{1}:查找一次數(shù)字。
看幾個(gè)實(shí)例
實(shí)例1:
實(shí)例2:
實(shí)例3:
實(shí)例4:
量詞量詞的意思是次數(shù),前面我們已經(jīng)使用到了一些量詞符號(hào),比如 +、 ?、 *、 {n, m}、 ^x$、最后還有零寬斷言 ?=n、?!n
n+:匹配任何包含至少一個(gè) n 的字符串。 n*:匹配任何包含零個(gè)或多個(gè) n 的字符串。 n?:匹配任何包含零個(gè)或一個(gè) n 的字符串。 n{X}:匹配包含 X 個(gè) n 的序列的字符串。 n{X,}:X 是一個(gè)正整數(shù)。前面的模式 n 連續(xù)出現(xiàn)至少 X 次時(shí)匹配。 n{X,Y}:X 和 Y 為正整數(shù)。前面的模式 n 連續(xù)出現(xiàn)至少 X 次,至多 Y 次時(shí)匹配。 n{X,}:匹配包含至少 X 個(gè) n 的序列的字符串。 n$:匹配任何結(jié)尾為 n 的字符串。 ^n:匹配任何開(kāi)頭為 n 的字符串。 ?=n:匹配任何其后緊接指定字符串 n 的字符串。 ?!n:匹配任何其后沒(méi)有緊接指定字符串 n 的字符串。
這一段內(nèi)容沒(méi)法用文字描述清楚,請(qǐng)自行在 https://regex101.com 測(cè)試吧,只有實(shí)踐才能理解理論。當(dāng)你練習(xí)的次數(shù)足夠多了,之后,你會(huì)發(fā)現(xiàn)這些量詞都不用刻意記住,憑著感覺(jué)就能隨手寫出來(lái)了。
總結(jié)正則表達(dá)式理論知識(shí)點(diǎn)很多,這一章內(nèi)容閱讀起來(lái)像讀天書,最重要的還是找到感覺(jué),就像你第一次學(xué)習(xí)react、vue、angular的時(shí)候,完全找不到方向,慢慢的,寫多了,突然有感覺(jué)了。正則還好,沒(méi)有太多復(fù)雜的概念,就是符號(hào)多了點(diǎn),常用的記住就行了。復(fù)雜的符號(hào)還是網(wǎng)上搜索吧,比如中文字符的正則,我真的記不住。。。
正則系列文章整理到了github:https://github.com/hyy1115/Re...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/91877.html
摘要:正則正則匹配的是零寬斷言這一塊我還沒(méi)有完成掌握,它的大概意思是,獲取某個(gè)字符或者某些字符前面的正則或者后面的正則。下一章正則表達(dá)式理論鞏固篇正則系列文章整理到了 如果你正則基礎(chǔ)為0,請(qǐng)先看第一篇文章:JavaScript正則表達(dá)式入門心得 實(shí)戰(zhàn)篇 上一章我分享了正則入門的一些體會(huì)以及注意事項(xiàng)。這一章開(kāi)始挑一些常用的比較復(fù)雜一點(diǎn)的需求來(lái)練習(xí)一下。 場(chǎng)景1:驗(yàn)證email是否合法 郵箱種類...
摘要:基礎(chǔ)鞏固基礎(chǔ)總結(jié)使用已經(jīng)好幾年了,由于工作主要是做服務(wù)端開(kāi)發(fā),在工作中逐漸發(fā)現(xiàn)的使用范圍原來(lái)越廣泛。這里要注意,務(wù)必將基礎(chǔ)部分掌握牢靠,磨刀不誤砍柴功,只有將基礎(chǔ)部分掌握并建立起系統(tǒng)的知識(shí)體系,在后面學(xué)習(xí)衍生的其他模式才能游刃有余。 基礎(chǔ)鞏固:JavaScript基礎(chǔ)總結(jié) 使用JavaScript已經(jīng)好幾年了,由于工作主要是做服務(wù)端開(kāi)發(fā),在工作中逐漸發(fā)現(xiàn)JavaScript的使用范圍原...
摘要:前端日?qǐng)?bào)精選面向初學(xué)者的高階組件教程騰訊大會(huì)圖文筆記第期如何在沒(méi)有實(shí)際項(xiàng)目經(jīng)驗(yàn)的情況下找到工作一篇包含了所有基本點(diǎn)的文章組件設(shè)計(jì)和分解思考中文常用命令嘿,前端丁香園開(kāi)源接口管理系統(tǒng)個(gè)人文章基于的手機(jī)控制電腦實(shí)例掘金如何在上創(chuàng)建 2017-09-17 前端日?qǐng)?bào) 精選 面向初學(xué)者的高階組件教程騰訊IMweb Conf 2017大會(huì)圖文筆記【第1059期】如何在沒(méi)有實(shí)際項(xiàng)目經(jīng)驗(yàn)的情況下找到工...
閱讀 3603·2021-11-24 10:25
閱讀 2508·2021-11-24 09:38
閱讀 1217·2021-09-08 10:41
閱讀 2903·2021-09-01 10:42
閱讀 2569·2021-07-25 21:37
閱讀 1981·2019-08-30 15:56
閱讀 914·2019-08-30 15:55
閱讀 2749·2019-08-30 15:54