摘要:在正則表達(dá)式中被稱(chēng)為元字符,它可以匹配除回車(chē)換行行分隔符和段分隔符以外的所有字符。點(diǎn)擊查看其他元字符。想要實(shí)際查看兩種模式的區(qū)別,可以將上方匹配的正則表達(dá)式的去掉再執(zhí)行,看看返回結(jié)果有何不同。
判斷郵箱是否正確 郵箱正則
/w+[w.]*@[w.]+.w+/測(cè)試用例
const regex = /w+[w.]*@[w.]+.w+/ regex.test("666@email.com") // true regex.test("july@e.c") // true regex.test("_@email.com.cn") // true regex.test("july_1234@email.com") // true regex.test("@email.com") // false regex.test("julyemail.com") // false regex.test("july.email.com") // false regex.test("july@") // false regex.test("july@email") // false regex.test("july@email.") // false regex.test("july@.") // false regex.test("july@.com") // false regex.test("-~!#$%@email.com") // false正則講解
w。 w屬于一種預(yù)定義模式,表示匹配任意的字母、數(shù)字和下劃線(xiàn)。點(diǎn)擊查看其他預(yù)定義模式。
+、*。 +、*和?在正則表達(dá)式中被稱(chēng)為量詞符。+表示一次或多次,*表示0次或多次,?表示0次或一次。
. 。 . 在正則表達(dá)式中被稱(chēng)為元字符,它可以匹配除回車(chē)( )、換行( ) 、行分隔符(u2028)和段分隔符(u2029)以外的所有字符。因?yàn)樵址刑厥夂x,所以如果要匹配元字符本身,就需要使用轉(zhuǎn)義字符,也就是在前面加上反斜杠 ( )。點(diǎn)擊查看其他元字符
[w.]。 [ ] 表示一個(gè)字符集合,比如 [ july ] 不是表示匹配整個(gè)單詞,而是表示j、u、l和y組成的一個(gè)字符集合,匹配時(shí)只要匹配到其中一個(gè)字母就表示匹配成功。點(diǎn)擊查看字符集合詳解
總覽
匹配URL地址 URL正則/https?://(w*:w*@)?[-w.]+(:d+)?(/([w/.]*(?S+)?)?)?/測(cè)試用例
const regex = /https?://(w*:w*@)?[-w.]+(:d+)?(/([w/.]*(?S+)?)?)?/ regex.test("http://www.forta.com/blog") // true regex.test("https://www.forta.com:80/blog/index.cfm") // true regex.test("https://www.forta.com") // true regex.test("http://ben:password@www.forta.com/") // true regex.test("http://localhost/index.php?ab=1&c=2") // true regex.test("http://localhost:8500/") // true正則講解
( ) 。類(lèi)似于( w:w*@ )這樣的表達(dá)式被稱(chēng)為子表達(dá)式,相比于字符集合[ ]匹配時(shí)只匹配集合中的一個(gè)字符,子表達(dá)式是將括號(hào)內(nèi)的表達(dá)式作為一個(gè)整體來(lái)匹配。比如 ( :d+ )匹配類(lèi)似于 “:8080” 這樣的字符串,而 [ :d ] 匹配一個(gè) : 或者一個(gè) 數(shù)字。
總覽
練習(xí) 去掉html文件中的所有注釋 html文件我在本地隨便寫(xiě)了一個(gè)html文件,包含css、html和js3個(gè)部分,是一個(gè)完整的網(wǎng)頁(yè)。
匹配Document h1 title
h2 title
const htmlStr = `html字符串`; // 將上面的html內(nèi)容拷貝于此,由于太長(zhǎng),就不再拷貝 // 匹配 /* */ htmlStr.match(//*[^]*?*//g); // 該行代碼會(huì)返回一個(gè)數(shù)組,長(zhǎng)度為10,數(shù)組的每個(gè)元素分別對(duì)應(yīng)匹配到的 /* */,由于篇幅有限,就不將結(jié)果展示到這里了 // 匹配 htmlStr.match(//g); // 匹配 // htmlStr.match(/(//.*?(?=([""]s*w+s*=)|([""]s*>)))|(//.*)/g);分析
g全局修飾符。g是正則表達(dá)式的修飾符,表示全局匹配或者搜索,因?yàn)閔tml中會(huì)有多個(gè)注釋?zhuān)孕枰中揎椃c(diǎn)擊查看全部修飾符)。
[^]。^被稱(chēng)為脫字符,我的理解就是取反的意思,比如[ ^abc ]表示除了a、b和c,其他所有字符都可以匹配。[^]匹配任意字符,包括換行符。
非貪婪模式。量詞符在默認(rèn)情況下都是使用貪婪模式進(jìn)行匹配,比如說(shuō)上面的[^]*表示匹配0個(gè)或多個(gè)任意字符,由于是貪婪模式,所以會(huì)盡可能多的匹配任意字符,直到不滿(mǎn)足條件為止。通過(guò)在[^]*后面加一個(gè)?號(hào),就變成了非貪婪模式,這種模式下,一旦條件滿(mǎn)足,就不會(huì)再往下匹配。想要實(shí)際查看兩種模式的區(qū)別,可以將上方匹配 /* */的正則表達(dá)式的?去掉再執(zhí)行,看看返回結(jié)果有何不同。
向前查找。向前查找就是一個(gè)以?=開(kāi)頭的子表達(dá)式。舉例說(shuō)明其意義,比如我們要匹配出URL的協(xié)議部分,URL:https://www.forta.com,正則:/.+(?=:)/,(?=:)就是一個(gè)向前查找,它表示只要匹配到:,就把:之前的內(nèi)容返回,:本身不需要返回。
前面兩種注釋的匹配比較容易,第三種也就是//這種注釋比較復(fù)雜。其實(shí)對(duì)于//注釋?zhuān)诮^大多數(shù)情況下///.*/這個(gè)正則可以匹配出,但是有兩種情況不能滿(mǎn)足,見(jiàn)下方代碼
我們通過(guò)圖片詳細(xì)解析一下
為了方便,最終代碼選擇在node環(huán)境中執(zhí)行,因?yàn)樽畛醯男枨笫菍tml中的所有注釋去掉,所以我們使用了字符串的replace方法,該方法接收兩個(gè)參數(shù),第一個(gè)參數(shù)是正則表達(dá)式,第二個(gè)參數(shù)是需要替換成的內(nèi)容。
const fs = require("fs"); // regex.html 是放在同級(jí)目錄下的html源文件 fs.readFile("./regex.html", "utf8", (err, data) => { if (err) throw err; console.log( data .replace(//*[^]*?*//g, "") // 替換 /* */ .replace(//g, "") // 替換 .replace(/(//.*?(?=([""]s*w+s*=)|([""]s*>)))|(//.*)/g, "") // 替換 // ); });參考資料
《正則表達(dá)式必知必會(huì)》
阮一峰javascript教程
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/106942.html
摘要:正則表達(dá)式使用單個(gè)字符串來(lái)描述匹配一系列匹配某個(gè)句法規(guī)則的字符串。接下來(lái),是在手機(jī)正則里面已經(jīng)出現(xiàn)了。序列匹配而則匹配。分組與反向引用分組,又稱(chēng)為子表達(dá)式。把正則表達(dá)式拆分成小表達(dá)式。 本文轉(zhuǎn)載自網(wǎng)絡(luò)。轉(zhuǎn)載編輯過(guò)程中,可能有遺漏或錯(cuò)誤,請(qǐng)以原文為準(zhǔn)。原文作者:水墨寒湘原文鏈接:https://juejin.im/post/582dfc... 正則表達(dá)式對(duì)于我來(lái)說(shuō)一直像黑暗魔法一樣的存...
摘要:基礎(chǔ)語(yǔ)法鞏固正則表達(dá)式引擎根據(jù)正則去匹配字符的時(shí)候,是通過(guò)檢查索引的方式。妻原配就是好,可以直接使用正則表達(dá)式調(diào)用它。下面解釋一下上面這些常用的元字符查找單個(gè)字符,除了換行和行結(jié)束符。正則系列文章整理到了 上一章內(nèi)容:正則表達(dá)式實(shí)戰(zhàn)篇 知識(shí)回顧 前2章分別學(xué)習(xí)了正則表達(dá)式入門(mén)技巧,以及遇到正則需求該如何去分析問(wèn)題,還有正則表達(dá)式實(shí)戰(zhàn)的一些場(chǎng)景解釋。 這一章內(nèi)容偏向理論,推薦你點(diǎn)擊開(kāi)頭的...
摘要:最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫(xiě),作用是對(duì)字符串執(zhí)行模式匹配。學(xué)習(xí)目標(biāo)了解正則表達(dá)式語(yǔ)法在中使用正則表達(dá)式在中使 JS高級(jí)技巧 本篇是看的《JS高級(jí)程序設(shè)計(jì)》第23章《高級(jí)技巧》做的讀書(shū)分享。本篇按照書(shū)里的思路根據(jù)自己的理解和經(jīng)驗(yàn),進(jìn)行擴(kuò)展延伸,同時(shí)指出書(shū)里的一些問(wèn)題。將會(huì)討論安全的類(lèi)型檢測(cè)、惰性載入函數(shù)、凍結(jié)對(duì)象、定時(shí)器等話(huà)題。1. 安全的類(lèi)型檢測(cè)...
摘要:對(duì)于對(duì)象,方法返回一個(gè)該正則表達(dá)式的字面量。顯示顯示正則表達(dá)式在的應(yīng)用一個(gè)在字符串中執(zhí)行查找匹配的方法,它返回一個(gè)數(shù)組或者在未匹配到時(shí)返回。 為什么要用正則表達(dá)式 簡(jiǎn)單的說(shuō):我們與字符串接觸的頻率非常之高,正則表達(dá)式可以極大的提高復(fù)雜文本分析的效率,快速匹配出復(fù)雜的字符串。 創(chuàng)建一個(gè)正則表達(dá)式 直接量語(yǔ)法(字面量) var expression = /pattern/flags ;...
閱讀 479·2021-10-09 09:57
閱讀 484·2019-08-29 18:39
閱讀 822·2019-08-29 12:27
閱讀 3037·2019-08-26 11:38
閱讀 2677·2019-08-26 11:37
閱讀 1303·2019-08-26 10:59
閱讀 1390·2019-08-26 10:58
閱讀 997·2019-08-26 10:48