摘要:在正則表達式中被稱為元字符,它可以匹配除回車換行行分隔符和段分隔符以外的所有字符。點擊查看其他元字符。想要實際查看兩種模式的區別,可以將上方匹配的正則表達式的去掉再執行,看看返回結果有何不同。
判斷郵箱是否正確 郵箱正則
/w+[w.]*@[w.]+.w+/測試用例
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屬于一種預定義模式,表示匹配任意的字母、數字和下劃線。點擊查看其他預定義模式。
+、*。 +、*和?在正則表達式中被稱為量詞符。+表示一次或多次,*表示0次或多次,?表示0次或一次。
. 。 . 在正則表達式中被稱為元字符,它可以匹配除回車( )、換行( ) 、行分隔符(u2028)和段分隔符(u2029)以外的所有字符。因為元字符有特殊含義,所以如果要匹配元字符本身,就需要使用轉義字符,也就是在前面加上反斜杠 ( )。點擊查看其他元字符
[w.]。 [ ] 表示一個字符集合,比如 [ july ] 不是表示匹配整個單詞,而是表示j、u、l和y組成的一個字符集合,匹配時只要匹配到其中一個字母就表示匹配成功。點擊查看字符集合詳解
總覽
匹配URL地址 URL正則/https?://(w*:w*@)?[-w.]+(:d+)?(/([w/.]*(?S+)?)?)?/測試用例
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正則講解
( ) 。類似于( w:w*@ )這樣的表達式被稱為子表達式,相比于字符集合[ ]匹配時只匹配集合中的一個字符,子表達式是將括號內的表達式作為一個整體來匹配。比如 ( :d+ )匹配類似于 “:8080” 這樣的字符串,而 [ :d ] 匹配一個 : 或者一個 數字。
總覽
練習 去掉html文件中的所有注釋 html文件我在本地隨便寫了一個html文件,包含css、html和js3個部分,是一個完整的網頁。
匹配Document h1 title
h2 title
const htmlStr = `html字符串`; // 將上面的html內容拷貝于此,由于太長,就不再拷貝 // 匹配 /* */ htmlStr.match(//*[^]*?*//g); // 該行代碼會返回一個數組,長度為10,數組的每個元素分別對應匹配到的 /* */,由于篇幅有限,就不將結果展示到這里了 // 匹配 htmlStr.match(//g); // 匹配 // htmlStr.match(/(//.*?(?=([""]s*w+s*=)|([""]s*>)))|(//.*)/g);分析
g全局修飾符。g是正則表達式的修飾符,表示全局匹配或者搜索,因為html中會有多個注釋,所以需要全局修飾符(點擊查看全部修飾符)。
[^]。^被稱為脫字符,我的理解就是取反的意思,比如[ ^abc ]表示除了a、b和c,其他所有字符都可以匹配。[^]匹配任意字符,包括換行符。
非貪婪模式。量詞符在默認情況下都是使用貪婪模式進行匹配,比如說上面的[^]*表示匹配0個或多個任意字符,由于是貪婪模式,所以會盡可能多的匹配任意字符,直到不滿足條件為止。通過在[^]*后面加一個?號,就變成了非貪婪模式,這種模式下,一旦條件滿足,就不會再往下匹配。想要實際查看兩種模式的區別,可以將上方匹配 /* */的正則表達式的?去掉再執行,看看返回結果有何不同。
向前查找。向前查找就是一個以?=開頭的子表達式。舉例說明其意義,比如我們要匹配出URL的協議部分,URL:https://www.forta.com,正則:/.+(?=:)/,(?=:)就是一個向前查找,它表示只要匹配到:,就把:之前的內容返回,:本身不需要返回。
前面兩種注釋的匹配比較容易,第三種也就是//這種注釋比較復雜。其實對于//注釋,在絕大多數情況下///.*/這個正則可以匹配出,但是有兩種情況不能滿足,見下方代碼
我們通過圖片詳細解析一下
為了方便,最終代碼選擇在node環境中執行,因為最初的需求是將html中的所有注釋去掉,所以我們使用了字符串的replace方法,該方法接收兩個參數,第一個參數是正則表達式,第二個參數是需要替換成的內容。
const fs = require("fs"); // regex.html 是放在同級目錄下的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, "") // 替換 // ); });參考資料
《正則表達式必知必會》
阮一峰javascript教程
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/106942.html
摘要:正則表達式使用單個字符串來描述匹配一系列匹配某個句法規則的字符串。接下來,是在手機正則里面已經出現了。序列匹配而則匹配。分組與反向引用分組,又稱為子表達式。把正則表達式拆分成小表達式。 本文轉載自網絡。轉載編輯過程中,可能有遺漏或錯誤,請以原文為準。原文作者:水墨寒湘原文鏈接:https://juejin.im/post/582dfc... 正則表達式對于我來說一直像黑暗魔法一樣的存...
摘要:基礎語法鞏固正則表達式引擎根據正則去匹配字符的時候,是通過檢查索引的方式。妻原配就是好,可以直接使用正則表達式調用它。下面解釋一下上面這些常用的元字符查找單個字符,除了換行和行結束符。正則系列文章整理到了 上一章內容:正則表達式實戰篇 知識回顧 前2章分別學習了正則表達式入門技巧,以及遇到正則需求該如何去分析問題,還有正則表達式實戰的一些場景解釋。 這一章內容偏向理論,推薦你點擊開頭的...
摘要:對于對象,方法返回一個該正則表達式的字面量。顯示顯示正則表達式在的應用一個在字符串中執行查找匹配的方法,它返回一個數組或者在未匹配到時返回。 為什么要用正則表達式 簡單的說:我們與字符串接觸的頻率非常之高,正則表達式可以極大的提高復雜文本分析的效率,快速匹配出復雜的字符串。 創建一個正則表達式 直接量語法(字面量) var expression = /pattern/flags ;...
閱讀 468·2021-10-09 09:57
閱讀 473·2019-08-29 18:39
閱讀 814·2019-08-29 12:27
閱讀 3030·2019-08-26 11:38
閱讀 2671·2019-08-26 11:37
閱讀 1296·2019-08-26 10:59
閱讀 1382·2019-08-26 10:58
閱讀 993·2019-08-26 10:48