學習筆記整理-正則表達式-01-認識正則

一、基本認識

1. 什么是正則表達式

  • 正則表達式(regular expression)描述了字符串"構成模式",經常被用于檢查字符串是否符合預定的格式要求。

  • 用一個例子快速演示正則表達式基本使用方法:檢查某個字符串是否是6位數字

       // 要檢查的字符串var str = '456789';// 正則表達式規則var regexp = /^\d{6}$/; // 檢查if (regexp.test(str)) {alert('符合規則'); } else {alert('不符合規則'); }
    
    • /^\d{6}$/就是正則表達式,它描述了字符串必須是"6位數字"的構成規則。
    • 正則表達式可以調用test()方法,檢查某字符串是否符合正則表達式規定的規則。
  • 正則表達式"按位"描述規則

    • 正則表達式"按位"描述規則,是指它是一位一位的描述字符串的構成形式。
    • 比如檢查字符串是不是這樣的:以字母m開頭,然后是3個數字,最后以字母n結尾。
          // ^表示開頭,$表示結尾,\d 表示數字 \d\d\d也可以寫作\d{3}/^m\d\d\dn$/
      

二、基本使用

1. 正則表達式的創建

  • 使用/內容/的語法形式,可以快速創建正則表達式。
  • 也可以使用new RegExp('內容')的形式,創建正則表達式。
  • 使用typeof運算符檢查正則表達式的類型,結果是object
    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
    </head>
    <body><script>// 創建正則表達式方法1var regexp1 = /^\d{6}$/;// 創建正則表達式方法2var regexp2 = new RegExp('^\\d{6}$');var str = '555666';console.log(regexp1.test(str));     // trueconsole.log(regexp2.test(str));     // trueconsole.log(typeof regexp1);        // objectconsole.log(typeof regexp2);        // object</script>
    </body>
    </html>
    

2. 元字符

  • "元字符"是指一位指定類型的字符

    元字符功能
    \d匹配一個數字
    \D匹配一個非數字字符
    \w匹配一個單字字符(字母、數字或者下劃線)
    \W匹配一個非單字字符
    \s匹配一個空白字符,包括空格、制表符和換行符
    .任意字符
  • 開頭和結尾

    元字符功能
    ^匹配開頭
    $匹配結尾
  • 元字符注意事項

    • 如果使用new RegExp()寫法,反斜杠需要多寫一個。
    • 比如/^\d$/new RegExp('^\\d$')是相同的意思
  • 元字符使用舉例

    • 某快遞公司運單號形式是這樣的:123-4567-890,請使用正則表達式檢查某字符串是否符合此格式
    • 某產品的驗證秘鑰形式是這樣的:□□□-□□□□-□□□,其中表示字母數字或者下劃線,請使用正則表達式檢查某字符串是否符合此格式
  • 字符的轉義

    • 在特殊字符之前的反斜杠\表示下一個字符不是特殊字符,應該按照字面理解。
      /^.$/:檢查字符串是不是任意字符
      /^\.$/:檢查字符串是不是一個點
      /^\\$/:檢查字符串是不是一個反斜杠
    • 不管一個符號有沒有特殊意義,都可以在其之前加上一個\以確保它表達的是這個符號本身。
    • 舉例:某產品批號形式為:123.45^67#89,請使用正則表 達式檢查某字符串是否符合此格式
  • 代碼演示

    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
    </head>
    <body><script>// 題目1:某快遞公司運單號形式是這樣的:123-4567-890,請使用正則表達式檢查某字符串是否符合此格式// 正則表達式var regexp1 = /^\d\d\d-\d\d\d\d-\d\d\d$/;// 待測試的字符串var str1 = '444-5555-000';console.log(regexp1.test(str1));// 題目2:某產品的驗證秘鑰形式是這樣的:□□□-□□□□-□□□,其中□表示字母數字或者下劃線,請使用正則表達式檢查某字符串是否符合此格式// 正則表達式var regexp2 = /^\w\w\w-\w\w\w\w-\w\w\w$/;// 待測試的字符串var str2 = 'abc-__ab-123';console.log(regexp2.test(str2));// 題目3:某產品批號形式為:123.45^67#89,請使用正則表達式檢查某字符串是否符合此格式var regexp3 = /^\d\d\d\.\d\d\^\d\d\#\d\d$/;// 待測試的字符串var str3 = '666.66^66#66';console.log(regexp3.test(str3));</script>
    </body>
    </html>
    

3. 方括號表示法

  • 使用方括號,比如[xyz],可以創建一個字符集合,表示匹 配方括號中的任意字符。

  • 比如某學校的學號規定:第1位是一個字母,b表示本科生,y表示研究生,后面是7位數字,用正則表示為:

      /^[by]\d{7}$/
    
  • 可以使用短橫-來指定一個字符范圍,^表示否定

    元字符等價的方括號表示法
    \d[0-9]
    \D[^0-9]
    \w[A-Za-z0-9]
    \W[^A-Za-z0-9]
  • 方括號表示法小題目

    • 題目1:請驗證某字符串是否是5位字母,大小寫均可
    • 題目2:請驗證某字符串是否是5位,且僅有小寫字母、點構成
    • 題目3:請驗證某字符串是否是4位小寫字母,且最后一位不能是m字母
      <!DOCTYPE html>
      <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
      </head><body><script>// 某學校的學號規定:第1位是一個字母,b表示本科生,y表示研究生,后面是7位數字,用正則表示為:// 學號字符串var str1 = 'm4444555';// 用正則表達式進行檢查console.log(/^[by]\d{7}$/.test(str1));// *******************************************// 題目1:請驗證某字符串是否是5位字母,大小寫均可var str2 = 'abcde';var str3 = 'abcd5';console.log(/^[a-zA-Z]{5}$/.test(str2));console.log(/^[a-zA-Z]{5}$/.test(str3));// 題目2:請驗證某字符串是否是5位,且僅由小寫字母、點構成var str4 = 'mnp..';var str5 = 'mnp.#';console.log(/^[a-z\.]{5}$/.test(str4));console.log(/^[a-z\.]{5}$/.test(str5));// 題目3:請驗證某字符串是否是4位小寫字母,且最后一位不能是m字母var str6 = 'abcd';var str7 = 'abcm';var str8 = 'ab1c';console.log(/^[a-z]{3}[a-ln-z]$/.test(str6));console.log(/^[a-z]{3}[a-ln-z]$/.test(str7));console.log(/^[a-z]{3}[a-ln-z]$/.test(str8));</script>
      </body></html>
      

4. 量詞

量詞意義
*匹配前一個表達式0次或多次。等價于{0,}
+匹配前面一個表達式1次或者多次。等價于{1,}
?匹配前面一個表達式0次或者1次。等價于{0,1}
{n}n是一個正整數,匹配了前面一個字符剛好出現了n次
{n,}n是一個正整數,匹配前一個字符至少出現了n次
{n, m}n和m都是整數。匹配前面的字符至少n次,最多m次
  • 量詞小題目
    • 題目1:請驗證字符串是否符合手機號碼的規則:11位數字,并且肯定以1開頭。
    • 題目2:請驗證某字符串是否是這樣的:以字母開頭,中間是任意位數字(最少1位)構成,并以字母結尾。
    • 題目3:請驗證某字符串是否符合網址規則:以www.開頭,中間是任意位的字符(字母數字下劃線),最后以.com結尾,也可以以.com.cn結尾
      <!DOCTYPE html>
      <html lang="en">
      <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
      </head>
      <body><script>// 題目1:請驗證字符串是否符合手機號碼的規則:11位數字,并且肯定以1開頭var str1 = '13812345678';var str2 = '138123456789';var str3 = '38123456789';var regexp1 = /^1\d{10}$/;console.log(regexp1.test(str1));console.log(regexp1.test(str2));console.log(regexp1.test(str3));// 題目2:請驗證某字符串是否是這樣的:以字母開頭,中間是任意位數字(最少1位)構成,并以字母結尾var str4 = 'a123123123b';var str5 = 'abcd';var str6 = 'a1b';var regexp2 = /^[a-zA-Z]\d+[a-zA-Z]$/;console.log(regexp2.test(str4));console.log(regexp2.test(str5));console.log(regexp2.test(str6));// 題目3:請驗證某字符串是否符合網址規則:以www.開頭,中間是任意位的字符(字母數字下劃線,最少一位),最后以.com結尾,也可以以.com.cn結尾var str7 = 'www.imooc.com';var str8 = 'www.sina.com.cn';var str9 = 'www.news.cn';var regexp3 = /^www\.\w+\.com(\.cn)?$/;console.log(regexp3.test(str7));console.log(regexp3.test(str8));console.log(regexp3.test(str9));</script>
      </body>
      </html>
      

5. 修飾符

  • 修飾符也叫作標志(flags),用于使用正則表達式實現高 級搜索

    修飾符意義
    i不區分大小寫搜索
    g全局搜索
  • 修飾符的使用

      var re = /m/gi;var re = new RegExp('m', 'gi');
    
    • 在正則表達式的第二個/后面寫修飾符,可以多個連寫。
    • new RegExp()形式的正則表達式,以字符串形式寫在第二個參數

三、相關方法

1. 正則表達式可以"打點"調用哪些方法呢?

方法簡介
test()測試某字符串是否匹配正則表達式,返回布爾值
exec()根據正則表達式,在字符串中進行查找,返回結果數組或者null
  • test()方法

    • 正則表達式的test()方法用來測試某字符串是否匹配此正則表達式,它返回true或false
        /^[a-z]{3}[a-ln-z]$/.test('abcd')
      
  • exec()方法

    • exec()方法功能是:在一個指定字符串中執行一個搜索匹配查找,返回一個結果數組或null
         var str = 'abc123def456ghi789';var regexp = /\d+/;var result1 = regexp.exec(str);
      
    • exec()方法的逐條遍歷
      • exec()方法最有趣的是,有"g"修飾符的正則表達式將自動成為"有狀態"的
        這意味著可以對單個字符串中的多次匹配結果進行逐條的遍歷

        <!DOCTYPE html>
        <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
        </head><body><script>var str = 'abc123def456ghi789';var regexp = /\d+/g;    // +表示貪婪的,盡可能多的匹配var result1 = regexp.exec(str);var result2 = regexp.exec(str);var result3 = regexp.exec(str);var result4 = regexp.exec(str);console.log(result1);console.log(result2);console.log(result3);console.log(result4);// 使用循環語句來循環執行exec,尋找所有的匹配結果var result;while (result = regexp.exec(str)) {console.log(result);}</script>
        </body></html>
        
  • 字符串的相關方法

    方法簡介
    search()在字符串中根據正則表達式進行查找匹配,返 回首次匹配到的位置索引,測試不到則返回-1
    match()在字符串中根據正則表達式進行查找匹配,返 回一個數組,找不到則返回null
    replace()使用替換字符串替換掉匹配到的子字符串,可以使用正則表達式
    split()分隔字符串為數組,可以使用正則表達式
    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
    </head>
    <body><script>var str = 'abc123def4567ghi89';// search()方法,很像indexOf(),返回查找到的第一個下標,如果找不到就是-1var result1 = str.search(/\d+/g);var result2 = str.search(/m/g);console.log(result1);       // 3console.log(result2);       // -1// match()方法,返回查找到的數組,找不到就是nullvar result3 = str.match(/\d+/g);console.log(result3);       // ["123", "4567", "89"]// replace()方法,進行替換var result4 = str.replace(/[a-z]+/g, '*');      // 注意+表示貪婪的,盡可能多的連續匹配小寫字母console.log(result4);       // *123*4567*89// split()方法,進行字符串拆為數組var result5 = str.split(/\d+/g);console.log(result5);       // ["abc", "def", "ghi", ""]</script>
    </body>
    </html>
    

四、應用

  • 用正則表達式進行表單驗證

    • 用正則表達式進行表單驗證是正則表達式最重要的實際應用
      <!DOCTYPE html>
      <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.warning {color: red;display: none;}</style>
      </head><body><div><p>請輸入中文姓名:<input type="text" id="nameField"><span class="warning" id="nameWarning">輸入的姓名不合法</span></p><p>請輸入手機號碼:<input type="text" id="telField"><span class="warning" id="telWarning">輸入的手機號碼不合法</span></p><p>請輸入Email:<input type="text" id="emailField"><span class="warning" id="emailWarning">輸入的Email不合法</span></p></div><script>var nameField = document.getElementById('nameField');var telField = document.getElementById('telField');var emailField = document.getElementById('emailField');var nameWarning = document.getElementById('nameWarning');var telWarning = document.getElementById('telWarning');var emailWarning = document.getElementById('emailWarning');// 當文本框失去焦點,就是光標不在文本框中了nameField.onblur = function () {// 得到姓名var name = nameField.value;if (/^[\u4E00-\u9FA5]{2,4}$/.test(name)) {// 如果通過校驗nameWarning.style.display = 'none';} else {// 如果沒有通過校驗nameWarning.style.display = 'inline';}};telField.onblur = function () {// 得到電話var tel = telField.value;if (/^1\d{10}$/.test(tel)) {// 如果通過校驗telWarning.style.display = 'none';} else {// 如果沒有通過校驗telWarning.style.display = 'inline';}};emailField.onblur = function () {// 得到emailvar email = emailField.value;// 合法的email都是abc_def123@abc.netif (/^\w{2,}\@\w{2,}\.[a-z]{2,4}(\.[a-z]{2,4})?$/.test(email)) {// 如果通過校驗emailWarning.style.display = 'none';} else {// 如果沒有通過校驗emailWarning.style.display = 'inline';}};</script>
      </body></html>
      
  • 重點內容

    • 元字符、量詞、方括號表示法
    • 正則表達式和字符串的常用方法

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41434.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41434.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41434.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第五課:聯合體或共用體 Union

功能描述&#xff1a;聯合體或共用體 Union 的介紹及使用方法 一、Union 簡介 共同體&#xff08;union&#xff09;也稱為聯合體&#xff0c;它能在同一個內存空間中存儲不同的數據類型&#xff08;不是同時存儲&#xff09;&#xff0c;其典型的用法是&#xff0c;設計一種表…

Vue3 —— watchEffect 高級偵聽器

該文章是在學習 小滿vue3 課程的隨堂記錄示例均采用 <script setup>&#xff0c;且包含 typescript 的基礎用法 前言 Vue3 中新增了一種特殊的監聽器 watchEffect&#xff0c;它的類型是&#xff1a; function watchEffect(effect: (onCleanup: OnCleanup) > void,o…

整理mongodb文檔:find方法查詢數據

個人博客 整理mongodb文檔:find方法查詢數據 求關注&#xff0c;求批評&#xff0c;求指出&#xff0c;如果哪兒不清晰&#xff0c;請指出來&#xff0c;謝謝 文章概敘 如題&#xff0c;本文講的是如何用find查詢數據&#xff0c;如何在數組、字段、對象中查詢&#xff0c;以…

自然語言處理技術:NLP句法解析樹與可視化方法

自然語言處理(Natural Language Processing,NLP)句法解析樹是一種表示自然語言句子結構的圖形化方式。它幫助將句子中的每個詞匯和短語按照語法規則連接起來,形成一個樹狀結構,以便更好地理解句子的語法結構和含義。句法解析樹對于理解句子的句法關系、依存關系以及語義角…

Python實現輕量級WEB服務器接收HTTP提交的RFID刷卡信息并回應驅動讀卡器顯示播報語音

本示例使用的設備&#xff1a;RFID網絡WIFI無線TCP/UDP/HTTP可編程二次開發讀卡器POE供電語音-淘寶網 (taobao.com) # -*- coding: utf-8 -*- import time import datetime import socket import threading#將中文信息轉換編碼&#xff0c;顯示文字、TTS語音都需要轉換-------…

從入門到精通Python隧道代理的使用與優化

哈嘍&#xff0c;Python爬蟲小伙伴們&#xff01;今天我們來聊聊如何從入門到精通地使用和優化Python隧道代理&#xff0c;讓我們的爬蟲程序更加穩定、高效&#xff01;今天我們將對使用和優化進行一個簡單的梳理&#xff0c;并且會提供相應的代碼示例。 1. 什么是隧道代理&…

SpringCloud Gateway:status: 503 error: Service Unavailable

使用SpringCloud Gateway路由請求時&#xff0c;出現如下錯誤 yml配置如下&#xff1a; 可能的一種原因是&#xff1a;yml配置了gateway.discovery.locator.enabledtrue&#xff0c;此時gateway會使用負載均衡模式路由請求&#xff0c;但是SpringCloud Alibaba刪除了Ribbon的…

無涯教程-Perl - setpwent函數

描述 此功能將枚舉設置(或重置)到密碼條目集的開頭。應該在第一次調用getpwent之前調用此函數。 語法 以下是此函數的簡單語法- setpwent返回值 此函數不返回任何值。 例 以下是顯示其基本用法的示例代碼- #!/usr/bin/perlwhile(($name, $passwd, $uid, $gid, $quota, …

C++寫文件,直接寫入結構體

C寫文件&#xff0c;直接寫入結構體 以前寫文件都是寫入字符串或者二進制再或者就是一些配置文件&#xff0c;今天介紹一下直接寫入結構體&#xff0c;可以在軟件參數較多的時候直接進行讀寫&#xff0c;直接將整個結構體寫入和讀取&#xff0c;看代碼&#xff1a; #include&…

tomcat中的BIO與NIO發展

tomcat中的NIO發展 前言 Tomcat目前支持BIO&#xff08;阻塞 I/O&#xff09;、NIO&#xff08;非阻塞 I/O&#xff09;、AIO&#xff08;異步非阻塞式IO&#xff0c;NIO的升級版&#xff09;、APR&#xff08;Apache可移植運行庫&#xff09;模型&#xff0c;本文主要介紹NI…

iceberg系列之 hadoop catalog 小文件合并實戰

背景 flink1.15 hadoop3.0pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mave…

UBuntu18.04 Qt之雙HDMI屏切換

UBuntu18.04 Qt之雙HDMI接2個4K屏并分別設置分辨率、主屏、副屏 一、設置HDMI-2為主屏 在main函數里面添加&#xff1a; #include "mainwindow.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);{long nTotal 0;c…

spring cloud gateway中配置uri

gateway中配置uri配置有三種方式: websocket方式&#xff1a;uri: ws://localhost:9000http方式: uri: http://localhost:8130/lb注冊中心配置方式&#xff08;注冊的服務名稱&#xff09;: uri: lb://monitor-ms gateway的lb方式識別的服務名稱命名規則&#xff1a; "[…

設計模式——適配器模式

引入實例 說起適配器其實在我們的生活中是非常常見的&#xff0c;比如&#xff1a;學校的宿舍的電壓都比較低&#xff0c;而有的學生想使用大功率電器&#xff0c;宿舍的就會跳閘&#xff0c;然而如果你使用一個適配器&#xff08;變壓器&#xff09;就可以使用了&#xff08;…

Jtti:windows虛擬內存最小值太低如何解決

當Windows虛擬內存的最小值設置過低時&#xff0c;可能會導致系統性能下降、應用程序崩潰甚至系統不穩定。解決方法包括&#xff1a; 調整虛擬內存設置&#xff1a; 可以通過以下步驟調整虛擬內存的設置&#xff1a; 右鍵點擊“此電腦”或“計算機”&#xff0c;選擇“屬性”。…

被迫學習一波Linux命令

事情起因 部署一個服務&#xff0c;人家說了最低配置是3G&#xff0c;我沒當回事&#xff0c;拿著個2G的服務器直接就上了&#xff0c;結果&#xff0c;哈哈&#xff0c;都能猜到結果&#xff1a;服務器內存爆了&#xff01;&#xff01;&#xff01;而且最可氣的是服務器還登…

ansible案列之LNMP分布式劇本

LNMP分布式劇本 一&#xff1a;環境設置二&#xff1a;編寫Nginx劇本準備nginx下載源準備配置文件并開放PHP的訪問路徑準備php測試頁面編寫nginx劇本 三&#xff1a;編寫Mysql劇本編寫密碼獲取腳本準備Mysql的yum源編寫mysql劇本 四&#xff1a;準備PHP劇本準備兩個配置文件編寫…

深入理解linux內核--塊設備驅動程序

塊設備的處理 塊設備驅動程序上的每個操作都涉及很多內核組件&#xff1b;其中最重要的一些如圖14-1所示。 例如&#xff0c;我們假設一個進程在某個磁盤文件上發出一個read()系統調用 ——我們將會看到處理write請求本質上采用同樣的方式。 下面是內核對進程請求給予回應的一…

煤礦調度IP語音對講廣播模塊一鍵求助對講礦用調度通信系統SIP語音對講求助終端

硬件接口描述 SV-2101VP/ SV-2103VP系列網絡音頻模塊&#xff0c;所有外部連接采用端子&#xff0c;電源采用2.0mm的端子&#xff0c;網絡采用標準RJ45連接器&#xff0c;其他都是1.25mm的連接器。 端口類型定義 P ———— 電源 AI ———— 模擬輸入&#xff08;在這里是音…

微信小程序前后端開發快速入門(完結篇)

這篇是微信小程序前后端快速入門完結篇了&#xff0c;今天利用之前學習過的所有知識做一個新的項目「群登記助手v1.0」小程序。 整體技術架構&#xff1a;小程序原生前端小程序云開發。 經歷了前面教程的學習&#xff0c;大家有了一定的基礎&#xff0c;所以本次分享重心主要是…