教你輕鬆搞定javascript中的正則

来源:https://www.cnblogs.com/lfcss/archive/2020/03/06/12424888.html
-Advertisement-
Play Games

1 正則表達式概述 1.1 什麼是正則表達式 正則表達式(Regular Expression)是用於匹配字元串中字元組合的模式。在Javascript中,正則表達式也是對象。正則表通常被用來檢索,替換那些符合某個模式(規則)的文本,例如驗證表單:用戶名錶單隻能輸入英文字母、數字或者下劃線,昵稱輸入 ...


1 正則表達式概述

1.1 什麼是正則表達式

正則表達式(Regular Expression)是用於匹配字元串中字元組合的模式。在Javascript中,正則表達式也是對象。
正則表通常被用來檢索,替換那些符合某個模式(規則)的文本,例如驗證表單:用戶名錶單隻能輸入英文字母、數字或者下劃線,昵稱輸入中文(匹配)。此外,正則表達式還常用於過濾掉頁面內容中的一些敏感詞,或從字元串從獲取我們需要的特定部分(提取)等。

1.2 正則表達式特點

  1. 靈活性、邏輯性和功能性非常強
  2. 可以迅速地用極其簡單的方式達到字元串的複雜控制
  3. 比較難懂

    2 正則表達式在Javascript中的使用

    2.1 創建正則表達式

  4. 通過RegExp對象的構造函數創建

var 變數名 = new RegExp(/表達式/)
// 利用RegExp創建對象
var regexp = new RegExp(/123/)
console.log(regexp)
  1. 通過字面量創建
var 變數名 = /表達式/
var rg = /123/
console.log(rg)

2.2 測試正則表達式 test

test()正則對象方法,用於檢測字元串是否符合該規則,該對象會返回true或false,其參數是測試字元串。

regexObj.test(str)
  • regexObj是寫的正則表達式
  • str 我們要測試的文本
  • 就是檢測str文本是否符合我們寫的正則表達式規範
var rg = /123/
console.log(rg.test(123)) //true
console.log(rg.test('abc')) //false 

3 正則表達式中的特殊字元

3.1 正則表達式的組成

一個正則表達式可以由簡單的字元構成,比如/abc/,也可以是簡單和特殊字元的組合,比如/ab*c/。其中特殊字元也被稱為元字元,在正則表達式中是具有特殊意義的專用符號。
由於特殊字元比較多,在這裡不再一一列舉,可以參考:
MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
在這裡可以把元字元劃分為幾類學習:

3.2 邊界符

正則表達式中的邊界符(位置符)用來提示字元所處的位置,主要有兩個字元。
image.png
如果^和$同時存在,則達到精確匹配

var rg= /abc/ //正則表達式裡面不需要加引號
// /abc/ 只要包含有abc這個字元串返回的都是true
console.log(rg.test('abc')) // true
console.log(rg.test('abcd')) // true
console.log(rg.test('aabcd')) // true

var reg = /^abc/
console.log(rg.test('abc')) // true
console.log(rg.test('abcd')) // true
console.log(rg.test('aabcd')) // false

var reg = /^abc$/ //精確匹配,要求必須是abc字元串才符合規範
console.log(rg.test('abc')) // true
console.log(rg.test('abcd')) // false
console.log(rg.test('aabcd')) // false
console.log(rg.test('abcabc')) // false

3.3 字元類

表示有有一系列字元可供選擇,只要匹配其中一個就可以了,所有可供選擇的字元都放在方括弧內

var rg = /[abc]/; //只要包含有a 或者b 或者c 都返回true
console.log(rg.test('andy')) //true
var rg = /[abc]/; //只要包含有a 或者b 或者c 都返回true
console.log(rg.test('baby')) //true
console.log(rg.test('color')) //true
console.log(rg.test('red')) //false

var rg = /^[abc]$/ //三選一 只有a 或者是b 或者是c, 這三個字母才返回true
console.log(rg.test('aa')) //false
console.log(rg.test('a')) //true
console.log(rg.test('b')) //true
console.log(rg.test('c')) //true
console.log(rg.test('abc')) //false


var rg = /^[a-z]$/ //26個英文字母任何一個字母返回true

var rg = /^[a-zA-Z]$/ //26個英文字母(大寫小寫)任何一個字母返回true

var rg = /^[a-zA-Z0-9_-]$/
console.log(rg.test('c')) //true
console.log(rg.test('B')) //true
console.log(rg.test('_')) //true
console.log(rg.test('8')) //true
console.log(rg.test('-')) //true

//如果中括弧裡面有^,表示取反的意思,要和邊界符^別混淆
var rg = /^[^a-zA-Z]$/

3.4 量詞符

量詞符用來設定某個模式出現的次數
image.png

var reg = /^a*$/
console.log(reg.test(''))// true
console.log(reg.test('a'))// true
console.log(reg.test('aaa'))// true


var reg = /^a+$/
console.log(reg.test(''))// false
console.log(reg.test('a'))// true
console.log(reg.test('aaa'))// true

var reg = /^a?$/
console.log(reg.test(''))// true
console.log(reg.test('a'))// true
console.log(reg.test('aaa'))// false

var reg = /^a{3}$/
console.log(reg.test(''))// false
console.log(reg.test('a'))// false
console.log(reg.test('aaa'))// true


var reg = /^a{3,}$/
console.log(reg.test(''))// false
console.log(reg.test('a'))// false
console.log(reg.test('aaa'))// true
console.log(reg.test('aaaaa'))// true


var reg = /^a{3,5}$/ //{3,5} 逗號後不要空格
console.log(reg.test(''))// false
console.log(reg.test('a'))// false
console.log(reg.test('aaa'))// true
console.log(reg.test('aaaaa'))// true

用戶名驗證

  1. 如果用戶名輸入合法,則後面提示信息為: 用戶名合法,並且顏色為綠色
  2. 如果用戶名輸入不合法,則後面提示信息為:用戶名不符合規範,並且顏色為綠色

用戶名驗證分析:

  1. 用戶名只能為英文字母,數字,下劃線或者短橫線組成, 並且用戶名長度為 6~16位.
  2. 首先準備好這種正則表達式模式 /^[a-zA-Z0-9-_]{6,16}$/
  3. 當表單失去焦點就開始驗證.  
  4. 如果符合正則規範, 則讓後面的span標簽添加 right 類.
  5. 如果不符合正則規範, 則讓後面的span標簽添加 wrong 類. 
<input type="text" class="uname"> <span>請輸入用戶名</span>
<style>
        span {
            color: #aaa;
            font-size: 14px;
        }
        
        .right {
            color: green;
        }
        
        .wrong {
            color: red;
        }
    </style>
var reg=/^[a-zA-Z0-9-_]{6,16}$/
var uname = doucument.querySelector('.uname');
var spn = doucument.querySelector('span');
uname.onblur = function() {
    if(res.test(this.value)){
    span.className='right'
    span.innerHTML = '用戶名輸入格式正確'
  } else {
    span.className='wrong'
    span.innerHTML = '用戶名輸入格式錯誤'
  }
}

3.5 括弧總結

  1. 大括弧:量詞符 裡面表示重覆次數
  2. 中括弧 : 字元集合。匹配方括弧中的任意字元
  3. 小括弧:表示 優先順序
//中括弧
var reg = /^[abc]$/  //a||b||c

//大括弧
var reg = /^abc{3}$/  //它只是讓c重覆三次

//小括弧
var reg = /^(abc){3}$/  //abc重覆三次

3.6 預定義類

預定義類指的時候某些常見模式的簡寫方式
image.png

座機號碼驗證

var reg= /^\d{3}-\d{8}|\d{4}-\d{7}$/ // |是或的意思
var reg= /^\d{3,4}-\d{7,8}|\d{4}-\d{7}$/ 

4 正則表達式中的替換

4.1 replace 替換

replace()方法可以實現替換字元串操作,用來替換的參數可以是一個字元串或者是一個正則表達式。

stringObject.replace(regxp/substr, replacement)
  1. 第一個參數:被替換的字元串或者正則表達式
  2. 第二個參數:替換為的字元串
  3. 返回值是一個替換完畢的新字元串
var str = 'lanfeng和qianduan'
var newStr = str.replace('front', 'qianduan')
console.log(newstr)

留言過濾敏感詞

<textarea name="" id="message"></textarea> <button>提交</button>
var text = document.querySelector('textarea');
var btn = document.querySelector('button');
var div = doucment.querySelector('div');
btn.onclick = function () {
    div.innerHTML = text.value.replace(/激情/g, '**')
}

4.2 正則表達式參數

/表達式/[switch]

switch(也稱為修飾符)按照什麼樣的模式來匹配,有三種值

  • g: 全局匹配
  • i:忽略大小寫
  • gi: 全局匹配+忽略大小寫

    總結

    本篇文章主要分享了javascript中正則的一些知識點及用法,如果想瞭解更多,請掃描二維碼:
    qrcode_for_gh_4d3763fa9780_258 (1).jpg


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

-Advertisement-
Play Games
更多相關文章
  • 1.下載node.js http://nodejs.cn/download/ 推薦下載 .mis安裝包,下一步下一步... 安裝完後,通過cmd控制台輸入node -v 彈出版本號即成功 2.通過node.js中內置的npm(包/依賴)插件來下載其他開發所需的環境 註意:如設置了代理限制,可通過cm ...
  • 文檔流: 普通流:上至下,左至右 浮動流:元素添加了float:; 定位流:添加了定位屬性 定位 position:; static 預設值 absolute 絕對定位(脫離文檔流,不占位;預設參考瀏覽器零點) relative 相對定位(占據文檔流,占位置;參考自身載入在頁面中的位置) fixed ...
  • $(document).keyup(function(event){ //鍵盤按下觸法 console.log("Key: "+event.keyCode); if(event.ctrlKey && event.keyCode 67){ console.log('ctrl+V'); }}); ...
  • 我們可以使用以下命令來查看當前的 Node 版本: node -v 接下來創建我的第一個node.js應用 server.js var http=require("http");//引入http模塊 //創建伺服器 http.createServer(function(request,respons ...
  • pagination分頁組件不支持 string的數據類型,解決問題的方法是,對傳給pagination的數據進行 Number處理下 同理,發現 element ui 也是這樣,還有下拉列表的value綁定為數值的話,做編輯操作v-model 對應的參數 (介面獲取)也要由Number處理 ...
  • 這次介紹的控制項相對比較簡單,滑鼠懸停時顯示彈出內容,效果如下: 為了增加靈活性,用slot實現,調用時的代碼: <MouseOverPop class="toolbox-element"> <template #heading> <div class="element-title"> 服務 </di ...
  • 我是在安裝 electron-vue 時遇到的報錯信息,報錯圖片如下 運行安裝模板時出現報錯,究其原因是因為 vue 的問題,而不是 electron ,具體解決方法如下: 必須要以管理員身份運行 終端 ,不然會報錯。 密令: get-ExecutionPolicy set-ExecutionPol ...
  • 作為一個有目標的人(目標是做一個好用的Bootstrap可視化編輯器,第一個版本已經實現,演示地址:https://vular.cn/rxeditor/,代碼地址:https://github.com/vularsoft/rxeditor),工作比較積極,思維也比較活躍,睡眠相對較少。今早6:30就 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...