正則表達式(輕鬆入門級)

来源:https://www.cnblogs.com/MaShuai666/archive/2018/02/01/8401348.html
-Advertisement-
Play Games

前言:正則表達式又稱為火星文,因為視覺上讓人感覺很複雜。本文將會詳細介紹正則表達式,初學者只要認真閱讀過,定會有收穫。 1、正則的概念 正則表達式(regular expression)是一個描述字元規則的對象。可以用來檢查一個字元串是否含有某個子字元串,將匹配的子字元串替換或者從某個字元串中取出符 ...


前言:正則表達式又稱為火星文,因為視覺上讓人感覺很複雜。本文將會詳細介紹正則表達式,初學者只要認真閱讀過,定會有收穫。

1、正則的概念

  正則表達式(regular expression)是一個描述字元規則的對象。可以用來檢查一個字元串是否含有某個子字元串,將匹配的子字元串替換或者從某個字元串中取出符合某個條件的子串等。

  為什麼要用正則:前端往往有大量的表達數據校驗工作,採用正則表達式會使得數據校驗的工作量大大減輕。常用效果(郵箱、手機號、身份證號等等)。

2、創建方式

  第一種方式:

// 通過構造函數的方式
  var oReg = new RegExp('study', 'i');

 

  第二種方式:

// 通過語法糖(簡寫)的形式
  var oReg = /study/i;

  修飾符:

  i :表示忽略大小寫。

  g:表示全局匹配,查找所有匹配而非在找到第一個匹配後停止。

  m:多行匹配。

3、正則對象方法

  test:檢索字元串中指定的值。返回true或false。

  exec:用於檢索字元串中的正則表達式的匹配。返回一個數組,其中存放匹配的結果,如果未找到匹配,則返回值為null。

  下麵我們來個舉個列子:

  // 首先我來看test
  //我們要在字元串str中找出符合Reg的規則的子字元串,符合則返回true,不符合則返回false
    var str = 'Good good study, Day day up! Good good study';
    var Reg1= /good/ig;
    var Reg2= /goood/ig;
    console.log(Reg1.test(str));//true
    console.log(Reg2.test(str));//false

  

    // 接下來我們再來看 exec
    //用於檢索字元串中的正則表達式的匹配。返回一個數組,其中存放匹配的結果,如果未找到匹配,則返回值為null
    var str = 'Good good study, Day day up! Good good study';
    var Reg= /good/ig;
    console.log(Reg.exec(str));//["Good", index: 0, input: "Good good study, Day day up! Good good study"]
    console.log(Reg.exec(str));//["good", index: 5, input: "Good good study, Day day up! Good good study"]
    console.log(Reg.exec(str));//["Good", index: 29, input: "Good good study, Day day up! Good good study"]
    console.log(Reg.exec(str));//["good", index: 34, input: "Good good study, Day day up! Good good study"]
    console.log(Reg.exec(str));//null
    //註:如果沒有指定g修飾符,那麼每次匹配都是從頭開始匹配,如果指定g修飾符以後,下次匹配則從上次匹配的結束位置開始匹配。

 

4、字元串函數

  search:檢索與正則表達式相匹配的值,返回字元串中第一個與正則表達式相匹配的子串的起始位置,如果沒有找到則返回-1。

  match :找到一個或多個正則表達式的匹配。

  replace:替換與正則表達式匹配的子串。

  split      :把字元串分割為字元串數組。

  單看概念不容易理解,看看下麵的小實列就一目瞭然

 
   var
str = 'Good good study, Day day up! Good good study'; var Reg= /study/ig; console.log(str.search(Reg));//10 console.log(str.match(Reg));// ["study", "study"] console.log(str.replace(Reg,'aaaa'));//Good good aaaa, Day day up! Good good aaaa console.log(str.split(Reg));//["Good good ", ", Day day up! Good good ", ""]

5、正則表達式構成

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

  ①元字元---限定符:

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

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

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

  {n}:匹配確定n次。

  {n,}:至少匹配n次。

  {n,m}:最少匹配n次且最多匹配m次。

  實列如下:

var str ='gd god good goood gooood';

     var Reg1 =/go*d/ig; //*:匹配前面的子表達式零次或多次
     console.log(str.match(Reg1));//["gd", "god", "good", "goood", "gooood"]


     var Reg2 =/go+d/ig; //+:匹配前面的子表達式一次或多次
     console.log(str.match(Reg2));//["god", "good", "goood", "gooood"]


     var Reg3 =/go?d/ig; //?:匹配前面的子表達式零次或一次
     console.log(str.match(Reg3));//["gd", "god"]


     var Reg4 =/go{2}d/ig; //{n}:匹配確定n次
     console.log(str.match(Reg4));//["good"]


     var Reg5 =/go{2,}d/ig; //{n,}:至少匹配n次
     console.log(str.match(Reg5));//["good", "goood", "gooood"]
     

     var Reg6 =/go{1,3}d/ig; //{n, m}:最少匹配n次且最多匹配m次
     console.log(str.match(Reg6));//["god", "good", "goood"]

 

 

  ②元字元---字元匹配符:

  字元匹配符用於匹配某個或某些字元。

  [xyz]:字元集合。匹配所包含的任意一個字元。

  [^xyz]:負值字元集合。匹配未包含的任意字元。

  [a-z]:字元範圍。匹配指定範圍內的任意字元。

  [^a-z]:負值字元範圍。匹配任何不在指定範圍內的任意字元。

  \d:匹配一個數字字元。

  \D:匹配一個非數字字元。

  \w:匹配包含下劃線的任何單詞字元。等價於[a-z0-9A-Z_]

  \W:匹配任何非單詞字元。等價於[^a-z0-9A-Z_]

  \s:匹配任何空白字元。

  \S:匹配任何非空白字元。

  ·:匹配除”\n”之外的任何單個字元。

  實列如下:

     var str = 'aiod acd abd add aed afd ahd $%#@ 12345678 asdfghh';

     var Reg1 = /a[abc]d/ig;        //[xyz]:字元集合。匹配所包含的任意一個字元
     console.log(str.match(Reg1)); //["acd", "abd"]

     var Reg2 = /a[^abc]d/ig;       //[^xyz]:負值字元集合。匹配未包含的任意字元
     console.log(str.match(Reg2)); // ["add", "aed", "afd", "ahd", "asd"]

     var Reg3 = /a[a-z]d/ig;        //[a-z]:字元範圍。匹配指定範圍內的任意字元
     console.log(str.match(Reg3)); //["acd", "abd", "add", "aed", "afd", "ahd", "asd"]

     var Reg4 = /a[^a-e]d/ig;      //[^a-z]:負值字元範圍。匹配任何不在指定範圍內的任意字元
     console.log(str.match(Reg4)); //["afd", "ahd", "asd"]

     var Reg5 = /\d+/ig;             //  \d:匹配一個數字字元。
     console.log(str.match(Reg5));  //["12345678"]

     var Reg6 = /\D+/ig;            //    \D:匹配一個非數字字元
     console.log(str.match(Reg6));  //["aiod acd abd add aed afd ahd $%#@ ", " asdfghh"]

     var Reg7 = /\w+/ig;            //   \w:匹配包含數字,字母,下劃線的任何單詞字元,等價於[a-z0-9A-Z_]
     console.log(str.match(Reg7));  //["aiod", "acd", "abd", "add", "aed", "afd", "ahd", "12345678", "asdfghh"]

     var Reg8 = /\W+/ig;            //    \W:匹配任何非單詞字元。等價於[^a-z0-9A-Z_]
     console.log(str.match(Reg8));  // [" ", " ", " ", " ", " ", " ", " $%#@ ", " "]

     var Reg9 = /\s+/ig;            //    \s:匹配任何空白字元
     console.log(str.match(Reg9));  //[" ", " ", " ", " ", " ", " ", " ", " ", " "]

     var Reg10 = /\S+/ig;            //    \S:匹配任何非空白字元
     console.log(str.match(Reg10)); //["aiod", "acd", "abd", "add", "aed", "afd", "ahd", "$%#@", "12345678", "asdfghh"]

  

  ③元字元---定位符:

  定位符可以將一個正則表達式固定在一行的開始或結束,也可以創建只在單詞內或只在單詞的開始或結尾處出現的正則表達式。  

  ^:匹配輸入字元串的開始位置。

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

  \b:匹配一個單詞邊界,也就是單詞和空格間的位置。

  \B:匹配非單詞邊界。

// ^:匹配輸入字元串的開始位置。
    var str  ='123456';  
    var Reg1  =/^\d+/ig;
    var Reg2  =/\d/ig;
    console.log(Reg1.test(str));//true
//$:匹配輸入字元串的結束位置。
    var str ='abcd789';
    var Reg =/.+\d{3}$/ig;
    console.log(Reg.test(str));//true
// \b:限定單詞以什麼開頭和結尾,\B:限定單位不以什麼開頭和結尾
var str = 'good ogoodm goods sgoods';

var reg1 = /\bg\w+/g;
var reg2 = /\w+d\b/g;
console.log(str.match(reg1));//["good", "goods"]
console.log(str.match(reg2));//["good"]
var reg3 = /\Bg\w+/g;
var reg4 = /\w+d\B/g;
console.log(str.match(reg3));//["goodm", "goods"]
console.log(str.match(reg4));//["ogood", "good", "sgood"]

 

  ④元字元---轉義符

  \:用於匹配某些特殊字元(遇到特殊字元需要用反斜杠轉義)

 // 特殊字元:. + * ? {} [] ^ $ \

    var str = '++++++-*/%';
    var oReg = /\++/g;
    console.log(str.match(oReg));//["++++++"]

  

  ⑤元字元---選擇匹配符

  |:可以匹配多個規則

// 選擇匹配符
var str = 'gooqd gaawd gwwsd';
var oReg = /g(ooq|aaw)d/g;
console.log(str.match(oReg));// ["gooqd", "gaawd"]

 

  接下來是常用簡單型檢測案例

  1、手機號檢測

// 下麵是國內 13、15、18開頭的手機號正則表達式。(可根據目前國內收集號擴展前兩位開頭號碼)
var reg = /^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$/

  2、檢測中文

//字元串只能是中文
var oReg = /^[\u2E80-\u9FFF]+$/;

  3、身份證檢測

// 18位身份證檢測
 var oReg = /^\d{17}[\dxX]$/;

  4、日期檢測

//日期檢測
 var oReg = /^\d{4}(\-|\/)\d{1,2}\1\d{1,2}$/;

  5、去除首尾空格

// 去除首尾的空格
var sVal = oSpace.value;
var oReg = /^\s+(\S*)\s+$/;
console.log(sVal.replace(oReg, '$1'));

  6、檢測文件格式

//檢測文件格式
var oReg = /.+\.(jpg|jpeg|png|gif)$/i;

  7、檢測郵編

//檢測郵編
var oReg = /^\d{6}$/;

  8、過濾

// 過濾
var str = '小明說小強是混蛋,小強說他不是混蛋';
str.replace(/混蛋/g, '**');

 

 

  


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

-Advertisement-
Play Games
更多相關文章
  • 本文主要應用了OkHttp的Interceptor來實現自定義重試次數 雖然OkHttp自帶retryOnConnectionFailure(true)方法可以實現重試,但是不支持自定義重試次數,所以有時並不能滿足我們的需求。 #1.自定義重試攔截器: #2.測試場景類: #3.輸出結果: #4.結 ...
  • #遇到問題: 當前開發的 App 遇到一個問題: 當請求某個介面時,由於 token 已經失效,所以介面會報錯。但是產品經理希望 app 能夠馬上刷新 token ,然後重覆請求剛纔那個介面,這個過程對用戶來說是無感的。>也就是靜默自動登錄,然後繼續請求:>請求 A 介面-》伺服器返回 token ...
  • 在iOS開發過程中,我們經常性會需要獲取當前頁面的ViewController,然後利用ViewController進行一些操作,例如在最頂層的ViewController上展示一個UIAlertController,或者在最頂層的ViewController上present另一個ViewContr ...
  • 谷歌在推出Android5.0的同時推出了一些新控制項,Android5.0中最常用的新控制項有下麵5種。 1. CardView(卡片視圖) CardView顧名思義是卡片視圖,它繼承FrameLayout。它是一個帶圓角的背景和陰影FrameLayout。CardView被包裝為一種佈局,並且經常在 ...
  • github項目代碼地址,歡迎start https://github.com/979451341/EventLine 接著上一篇繼續寫,這次我們要在接收函數上使用元註解來區別接收函數需要在哪個線程執行 然後在EventLine裡面添加兩個常量 使用元註解 實現我們需要得到activity的rece ...
  • 1:正則的概念 正則表達式(regular expression)是一個描述字元規則的對象。可以用來檢查一個字元串是否含有某個子字元串,將匹配的子字元串做替換或者從某個字元串中取出符合某個條件的子串等。 為什麼要用正則:前端往往有大量的表單數據校驗工作,採用正則表達式會使得數據校驗的工作量大大減輕。 ...
  • 本文最初發表於 "博客園" ,併在 "GitHub" 上持續更新 前端的系列文章 。歡迎在GitHub上關註我,一起入門和進階前端。 以下是正文。 BOM的介紹 JavaScript的組成 JavaScript基礎分為三個部分: ECMAScript:JavaScript的語法標準。包括變數、表達式 ...
  • 3.1.1版本 <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> 3.0.0版本 <script src="https://code.jquery.com/jquery-3.0.0.min.js"></script ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...