html5知識點:簡析正則表達式

来源:http://www.cnblogs.com/xiaoqianqian/archive/2017/12/01/7943904.html
-Advertisement-
Play Games

很多人對正則表達式的印象都是用來做表單驗證的,這其實是不大準確的。正則表達式目前在很多軟體中都得到了廣泛的應用,包括Linux,Unix等操作系統,VBScript,Java,PHP等開發環境中,以及很多應用軟體都能應用到正則表達式。 ...


很多人對正則表達式的印象都是用來做表單驗證的,這其實是不大準確的。正則表達式目前在很多軟體中都得到了廣泛的應用,包括Linux,Unix等操作系統,VBScript,Java,PHP等開發環境中,以及很多應用軟體都能應用到正則表達式。

一,正則的歷史。

首先先來掃清一個誤區,老是有人認為正則表達式是JS自己發明的,這當然是不正確的。1956年,一位名叫Stephen Kleene的數學家在McCulloch和pitts早期工作的基礎上,發表了一篇標題為“神經網的表示法”的論文,第一次引入了正則表達式的概念。所謂的正則表達式就是用來描述被他稱為“正則集的代數”的表達式,因此採用了“正則表達式”這個術語。

 

 

隨後,人們發現可以將這一工作應用於使用ken Thompson的計算搜索演算法的一些早期研究,Ken Thompson是Unix的主要發明人,第一個將正則表達式使用在應用程式上的就是Unix中的qed編輯器。從那時起直至現在正則表達式都是基於文本的編輯器和搜索工具中的一個重要部分。

正則表達式的發展歷史並不是特別的長遠,但是推出之後卻迅速被各大編程語言所吸收採納。這主要得益於它自己的特點:

第一,相較於傳統的驗證方式,正則表達式可以更高效的完成需要做的驗證工作。

第二,捕獲字元串的能力,正則也可以很好的完成工作,比如截取url的功能變數名稱或者其他的內容等等。

第三,表達靈活和寫法簡潔。從表單中複雜的各種驗證,到對字元串的各種處理,都可以用正則表達式輕鬆實現。

二.正則表達式的定義

正則表達式描述了一種字元串匹配的模式,可以用來檢索一個字元串中是否含有某種子字元串,將匹配的子字元串做替換或者從某個串中取出符合某個條件的子字元串等。

正則表達式是由普通字元(a-z)以及特殊字元(也叫元字元)組成的文字模式。正則表達式作為一個模板,將某個字元模式與所搜索的字元串進行匹配。

2.1普通字元

由所有那些未顯示指定為元字元的列印和非列印字元組成。這就包括了所有的大寫和小寫字元字元,所有數字,所有的標點符號以及一些符號。

2.2特殊字元

特殊字元,指有特殊含義的字元,如“*.exe”中的*.簡單的說就是表示任何字元串的意思,如果要查找文件名中有*的文件,則需要對*進行轉義,即在其前面加一個\.ls  \.exe。

正則表達式里的特殊字元$,( ),*,+,...[,?,\,^,|

$匹配輸入的字元串的結尾位置。

()標記一個子表達式的開始和結束位置。

*匹配前面的子表達式零次或多次。

+匹配前面的子表達式一次或多次。

.匹配除換行符\n之外的任何單字元。

[標記一個中括弧表示式的開始。

?匹配前面的子表達式零次或一次。

{標記限定表達式的開始。

\將下個字元標記為特殊字元,或原意字元,或向後引用,或八進位轉義符。

^匹配輸入字元串的開始位置,除非在方括弧表達式中使用,此時它表示不接受該字元集合。

|指明兩項之間的一個選擇。

2.3限定符

限定符用來指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配。有*,+,?,{n},{n,},{n,m}共6種。

*匹配前面的子表達式零次或多次.

+匹配前面的自表達式一次或多次,?匹配前面的子表達式零次或一次。

{n} n是一個非負整數,匹配確定的n次。

{n,}n是一個非負整數,至少匹配n次。

{n,m}m和n均為非負整數,且n<=m,最少匹配n次且最多匹配m次。

2.4定位符

用來描述字元串或單詞的邊界,^和$分別指字元串的開始和結束,\b描述單吃的前或後邊界,\B表示非單詞邊界,不能對定位符使用限定符。

三.正則表達式在web中的應用

正則表達式在web系統中的應用廣泛,可以進行數據格式檢測,替換相關文本,提取感興趣的文本內容等。

例如:驗證字元串中E-mail地址的合法性

郵件地址格式是<用戶名@功能變數名稱>,對於用戶名,除了數字和字母外,有的允許有“-”,有的允許有“.”,也有的兩者都可,或者允許其他的特殊字元。對此我們只能根據具體情況判斷。文字中假設除字母和數字外還允許“.”“-”並且“.”“-”不嗯給你出現在首末位。“,”“。”“-”不能相連。功能變數名稱中各段除數字和字母外只允許出現”-”且不能不出現在首位和末位,各段用“.”連接,我們可以從功能變數名稱得知最後一段大於一位且只有字母,根據以上內容我們可以寫出表達式倆判斷該串是否是合法的郵件地址。

是不是感覺很麻煩,光聽規則就感到頭疼?別急,分部解釋如下:

^:匹配開始

([a-z0-9A-Z]+[-|\.]?)+:數字或字母大於一位,“-”或”.“以上組合重覆1次以上。

[a-z0-9A-Z]:用戶名以數字或字母結尾。

@:匹配“@”[a-z0-9A-Z]+匹配多位數字或字母

(-[a-z0-9A-Z]+)?:匹配一加多位數字或字母0次或1次。

\.:匹配”.”

+:匹配括弧內的內容多次

[a-zA-Z]{2,}匹配字母2次以上

$:匹配結尾把上面的各項組合一起,就可以匹配一個比較全面的郵件地址,正則表示式如下:

^([a-z0-9A-Z]+[-|\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\.)+[a-zA-Z]{2,}$

複雜麽?整個來看確實還蠻複雜的,但當你把功能分開,先逐個實現,再組合在一起,其實也沒那麼複雜吧。

全棧工程師需要懂正則來做各種表單驗證,字元串處理,架構師也要懂正則表達式,因為框架中都會用到正則表達式。那麼,根據前文提到的,正則表達式理所當然是我們必須學會的語言之一。HTML5的正則表達式項目開發課程有啥特點呢?最大的特點就是突出實用和高效。在精通前端的基礎上學習正則表達式,能夠更好的站在更高的層次去思考和學習正則表達式。

正則表達式項目開發課程如何講授呢?主要突出以下幾點:

第一,循序漸進。本課程先從基礎講起,先讓學生熟悉更種字元串操作,掌握字元串的驗證方式。然後結合實際,找一個實際的線上項目,然後分析驗證的方式和方法,講解正則表達式的用法。

第二,項目驅動。全程以項目來驅動知識點的學習,在瞭解實際的需求後,用正則表達式實現我們的需求。

第三,註重實戰。學生在聽完講師的課堂面授後,要親自動手完成另一個新項目。

正則表達式項目開發課程內容包含正則表達式基礎,高級的用法及各種常見驗證的寫法用三個組成部分,具體內容如下:

第一部分:正則表達式的基礎。本部分主要包含三個方面:

正則表達式基礎。內容主要包含正則的語法,常見符號及簡單的表單驗證。

第二部分:高級用法及複雜的正則驗證。

第三部分:找個具體的項目,在實際中體會正則的好處。

四.結語

正則表達式語法簡潔,功能強大,特別在對數據的驗證問題上,在日常數據處理與軟體開發中,正則表達式已成為不可缺少的工具,相信隨著web網的發展,正則表達式的應用會越來越強大越來越易使用。

來源:千鋒html5


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.1 負載均衡介紹 1.1.1 負載均衡的妙用 負載均衡(Load Balance)集群提供了一種廉價、有效、透明的方法,來擴展網路設備和伺服器的負載、帶寬、增加吞吐量、加強網路數據處理能力、提高網路的靈活性和可用性。 ü 單台電腦無法承受大規模的併發訪問或數據流量了,此時需要搭建負載均衡集群把 ...
  • 1、下載軟體包 wget http://pecl.php.net/get/redis-2.2.5.tgz 2、解壓 tar zxvf redis-2.2.5.tgz 3、進入安裝目錄 cd redis-2.2.5 4、用phpize生成configure配置文件 /usr/local/php/bin ...
  • 描述 前面我們已經對領域內的名詞進行了抽取,並且已經確定了業務流程中參與的核心對象。 但是對象只是靜態的描述,系統中往往會有很多的業務操作,偏演算法的,之前我們說過 領域內的對象往往是比較穩定不怎麼變化的,但是,業務的流程以及業務操作這些是往往 千變萬化,防不勝防,那麼我們如何去及時發現這些系統內變化 ...
  • 同步首發:http://www.yuanrengu.com/index.php/20171130.html 項目開發接近尾聲,開始著手在生產環境部署項目,開發階段部署項目都沒用nginx。項目是採用SOA架構,多系統開發,主要包括服務系統、中台系統、後臺系統、金融系統、介面系統、調度系統、報表系統等 ...
  • 1、一行超出文字隱藏 2、div顯示兩行文字,超出兩行部分省略號顯示 3、white-space屬性可設置不換行 4、word-break屬性設置自動換行的處理方法 ...
  • 詳述JavaScript的官方模塊風格。加入這一定義旨在代替過去幾年中出現過的許多非正式的模塊定義風格。 ...
  • 介紹正式加入 JavaScript 的反射 API 和新的代理對象,開發者可以通過代理對象攔截每一個對象中執行的操作,代理也賦予了開發者空前的對象控制權,同樣也為定義新的交互模式帶來無限可能。 ...
  • CodePen 需要使用色 ec6337(當然可以是任意顏色),解決問題:記住密碼定製 CheckBox,解釋全在註釋里 主要使用到 ::before 或 ::after 偽類處理,偽裝成內部的那個勾 html CSS(LESS) CodePen ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...