2025第1周 | JavaScript中的正則表達式

目錄

  • 1. 正則表達式是個什么東東?
    • 1.1 怎么定義正則
    • 1.2 對象字面量方式
    • 1.3 類創建方式
  • 2. 怎么使用
    • 2.1 實例方法
      • 2.1.1 exec方法
      • 2.1.2 test方法
    • 2.2 字符串中的方法
      • 2.2.1 match/matchAll
      • 2.2.2 replace/replaceAll
      • 2.2.3 split
      • 2.2.4 search
  • 3. 規則
    • 3.1 修飾符
    • 3.2 字符類
    • 3.3 錨點(Anchors)
    • 3.4 轉義字符串
    • 3.5 集合(Sets)和范圍(Ranges)
    • 3.6 量詞
    • 3.7 捕獲組
    • 3.8 貪婪模式和惰性模式

2025,做想做的事,讀想讀的書,持續學習,自律生活,修行人生。

2025一個轉身就已到來,對于時間太快,總會有種惶恐感。每每回首過去,總會發現想要做的事情沒有完成,學習的內容少之又少,讀的有用的書籍更是可以忽略不計。對于內在的超越,內在的修行也是沒有始終踐行,知行合一,實踐、認識、再實踐、再認識…

2025年第1周:2025.01.01 ~ 2025.01.05

目標:JavaScript中的正則表達式,您搞懂了么?這部分內容,不需要深入了了解,但是基本的概念和用法需要掌握。

  • 正則表達式是個什么東東?
  • 怎么使用?
  • 規則有哪些

1. 正則表達式是個什么東東?

我們看一下百度百科上的解釋:

正則表達式(Regular Expression):又稱規則表達式,在代碼中常簡寫為regexregexpRE 。正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串,通常被用來檢索、替換那些符合某個模式(規則)的文本。許多程序設計語言都支持利用正則表達式進行字符串操作。

讀了半天,還是懵,說的什么東東?

其實就一句話:在JavaScript中,就是用來進行字符串匹配的,進行搜索、獲取、替代字符串

1.1 怎么定義正則

那么,怎么定義正則呢?有兩種方式來定義正則:

  1. 對象字面量方式(常用)
  2. 使用類RegExp創建

正則有兩部分構成:模式、和修飾符。

1.2 對象字面量方式

  • 這里面xxx:為模式
  • ig:為修飾符
// 對象字面量方式創建正則
const regexp = /xxx/ig

1.3 類創建方式

  • 使用RegExp 類來創建
const regexp = new RegExp("xxx", "ig")

2. 怎么使用

有了正則表達式之后,我們要如何使用它呢? 在JavaScript中,主要用于以下兩個場景:

  1. RegExp的實例方法:exec、和 test 方法
  2. 字符串的方法:match/matchAllreplace/replaceAllsearchsplit 方法。

2.1 實例方法

2.1.1 exec方法

  • exec方法:使用正則,執行一個字符串。
const re1 = /qtz/ig; 
const message = "welcom to qtz";const result = re1.exec(message);
console.log(result);// [ 'qtz', index: 10, input: 'welcom to qtz', groups: undefined ]

2.1.2 test方法

test方法:檢測某一個字符串是否符合正則的規則。返回boolean類型。

const regexp = /qtz/ig
const str = "welcome to qtz"
if (regexp.test(str)) {console.log("匹配到了qtz")
}

2.2 字符串中的方法

2.2.1 match/matchAll

  • 注意:matchAll傳入的正則修飾符,必須加g,否則會報如下錯誤:
Uncaught TypeError: String.prototype.matchAll called with a non-global RegExp argument
  • matchAll 返回值:得到是一個迭代器對象(RegExpStringIterator{})
const re = /qtz/ig; 
const message = "Qtz and qtz or qtz";const result = message.matchAll(re);console.log(result.next()); 
console.log(result.next());
console.log(result.next());

2.2.2 replace/replaceAll

  • 替換字符串
const re1 = /qtz/ig; 
const message = "Qtz and qtz or qtz";const result = message.replace(re1, "AAA");
console.log(result);    // AAA and AAA or AAA

2.2.3 split

  • 字符串分割
const reg = /qtz/ig; 
const message = "Qtz and qtz or qtz";const result = message.split(reg);
console.log(result);   // [ '', ' and ', ' or ', '' ]

2.2.4 search

  • 查找字符串
const reg = /qtz/i; 
const message = "HH Qtz and qtz or qtz";const result = message.search(reg);
console.log(result);  // 3

3. 規則

3.1 修飾符

  • g:全局,匹配所有
  • i:忽略大小寫
  • m:多行匹配

3.2 字符類

字符類(Character classes)是一個特殊的符號,匹配特定集中的任何符號:

  • \d :數字從0到9的字符
  • \s:空格符號,包括空格、制表符 \t、換行符\n 和其他少數稀有字符,例如 \v\f\r
  • \w:'單字"字符,拉丁字母、數字、下劃線-。相當于 [ a-zA-Z0-9_ ]
  • .(點):點 . 是一種特殊字符類,它與“除換行符之外的任何字符”匹配.

反向類(Inverse classes)

  • \D 非數字:除 \d 以外的任何字符,例如字母,
  • \S 非空格符號:除\s 以外的任何字符,例如字母。
  • \W 非單字字符:除 \w 以外的任何字符,例如非拉丁字母或空格,

3.3 錨點(Anchors)

符號^和符號 $ 在正則表達式中具有特殊的意義,它們被稱為“錨點”。

  • 符號 ^ 匹配文本開頭;
  • 符號 $ 匹配文本末尾,

詞邊界(Word boundary)

  • 詞邊界 \b 是一種檢査,就像 ^$ 一樣,它會檢査字符串中的位置是否是詞邊界。
  • 詞邊界測試 \b 檢査位置的一側是否匹配 \w,而另一側則不匹配“\w“

3.4 轉義字符串

如果要把特殊字符作為常規字符來使用,需要對其進行轉義

  • 只需要在它前面加個反斜杠 \

常見的需要轉義的字符:

[ ] \ ^ $ . | ? * + ( )
  • 斜杠符號 / 并不是一個特殊符號,但是在字面量正則表達式中也需要轉義;
const re = /\//

3.5 集合(Sets)和范圍(Ranges)

有時候我們只要選擇多個匹配字符其中之一就可以:

  • 在方括號 [...] 中的幾個字符或者字符類意味著“搜索給定的字符中的任意一個”.

集合(Sets)

  • 比如說,[eao] 意味著查找在3個字符’a’、'e’或者、'o’中的任意一個;

范圍(Ranges):方括號也可以包含字符范圍

  • 比如說,[a-z]會匹配從 a到z范圍內的字母,[0-5]表示從05的數字;
  • [0-9A-F]表示兩個范圍:它搜索一個字符,滿足數字 0 到 9 或字母 A 到 F
  • \d :和 [0-9]相同;
  • \w:和 [a-zA-Z0-9_]相同;

3.6 量詞

用來形容我們所需要的數量的詞被稱為量詞(quantifiers)。

數量 {n}

  • 確切的位數:{5}
  • 某個范圍的位數:{3,5} 注意,號后面不能有空格

簡寫:

  • +:代表“一個或多個”,相當于{1,}
  • ?:代表“零個或一個”,相當于(0,1}。換句話說,它使得符號變得可選;
  • *:代表著“零個或多個”,相當于{0,}。也就是說,這個字符可以多次出現或不出現;

3.7 捕獲組

  1. 模式的一部分可以用括號括起來(.),這稱為“捕獲組。這有兩個作用:
  • 它允許將匹配的一部分作為結果數組中的單獨項,
  • 它將括號視為一個整體;
  1. 命名組:
  • 用數字索引記錄組很困難。
  • 對于更復雜的模式,計算括號很不方便。我們有一個更好的選擇:給括號起個名字。
  • 這是通過在開始括號之后立即放置?<name>來完成的。
  1. 非捕獲組:
  • 有時我們需要括號才能正確應用量詞,但我們不希望它們的內容出現在結果中
  • 可以通過在開頭添加 ?:來排除組。
  • 在正則表達式中,它用豎線|表示,
  • 通常會和捕獲組一起來使用,在其中表示多個值
  • [aeo]的區別:中括號是單個字符

3.8 貪婪模式和惰性模式

默認情況下的匹配規則:是查找到匹配的內容后,會繼續向后查找,一直找到最后一個匹配的內容

  • 這種匹配的方式,我們稱之為貪婪模式

懶性模式中的量詞與貪婪模式中的是相反的。

  • 只要獲取到對應的內容后,就不再繼續向后匹配
  • 我們可以在量詞后面再加一個問號?來啟用它
  • 所以匹配模式變為 *?+?,甚至將?變為 ??

END !

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

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

相關文章

大模型LLM-Prompt-OPTIMAL

1 OPTIMAL OPTIMAL 具體每項內容解釋如下&#xff1a; Objective Clarity&#xff08;目標清晰&#xff09;&#xff1a;明確定義任務的最終目標和預期成果。 Purpose Definition&#xff08;目的定義&#xff09;&#xff1a;闡述任務的目的和它的重要性。 Information Gat…

78、使用愛芯派2_AX630C開發板 3.2T高有效算力 低功耗 支持AI-ISP真黑光實驗

基本思想:使用愛心元智最新的版本開發板進行實驗 AX630C、AX620Q 都是 620E 這一代 一、參考這個官方教程,先把代碼在本地交叉編譯完成 https://github.com/AXERA-TECH/ax620e_bsp_sdk 然后在拷貝到620c設備上 root@ax630c:~/ax620e_bsp_sdk/msp/out/arm64_glibc/bin# ./…

C語言 掃雷程序設計

目錄 1.main函數 2.菜單打印menu函數 3.游戲game函數 4.宏定義 5.界面初始化 6.打印界面 7.設置雷 8.統計排查坐標周圍雷的個數 9.排查雷 10.總代碼 test.c代碼 game.h代碼 game.c代碼 結語&#xff1a; 一個簡單的掃雷游戲&#xff0c;通過宏定義可以修改行列的…

《高速公路警察模擬器》

一個引人入勝的警察故事在等著你&#xff0c;你可以選擇扮演男警官或女警官。公路警察模擬器》擁有休閑和模擬兩種游戲模式&#xff0c;將兩個世界的精華結合在一起&#xff1a;在身臨其境的虛擬環境中自由駕駛和行走&#xff0c;在故事驅動的游戲中解決各種令人興奮的案件。探…

EasyGBS小知識:如何確保攝像機的網絡連接穩定?

在當今數字化時代&#xff0c;視頻監控系統已成為保障安全和提高效率的重要工具。然而&#xff0c;攝像機的網絡連接穩定性直接關系到監控系統的可靠性和有效性。為了確保視頻監控系統能夠持續穩定地運行&#xff0c;我們需要從硬件、網絡設置、軟件與監控以及安裝與維護等多個…

微服務-Eureka

Eureka的作用 使用RestTemplate完成遠程調用需要被調用者的ip和端口&#xff0c;從而能夠發起http請求&#xff0c;但是如果有很多個實例也更加不能有效的處理&#xff0c;而且我們又該如何知道這些實例是否健康呢。所以就有了很多的注冊中心比如Eureka、Nacos等等。 服務注…

LabVIEW軟件侵權分析與應對

問&#xff1a;如果涉及到LabVIEW軟件的仿制或模仿&#xff0c;特別是在功能、界面等方面&#xff0c;如何判斷是否構成侵權&#xff1f;該如何應對&#xff1f; 答&#xff1a;LabVIEW軟件的侵權問題&#xff0c;尤其是在涉及到仿制或模仿其功能、界面、設計等方面&#xff0…

MATLAB仿真:基于GS算法的經大氣湍流畸變渦旋光束波前校正仿真

GS算法流程 GS&#xff08;Gerchberg-Saxton&#xff09;相位恢復算法是一種基于傅里葉變換的最速下降算法&#xff0c;可以通過輸出平面和輸入平面上光束的光強分布計算出光束的相位分布。圖1是基于GS算法的渦旋光束畸變波前校正系統框圖&#xff0c;在該框圖中&#xff0c;已…

數樹數(中等難度)

題目&#xff1a; 解題代碼&#xff1a; n,qmap(int,input().split())#分別輸入層數和路徑數量 for i in range(q):sinput()#輸入“L”或“R”x1for j in s:if j "L":xx*2-1 #&#xff01;&#xff01;&#xff01;規律else:xx*2print(x)

高效內存管理與調試技巧:深入解析 AddressSanitizer

在現代 C開發中&#xff0c;內存管理是一個至關重要但也容易出錯的領域。即使使用了智能指針和其他高效工具&#xff0c;復雜的項目仍可能出現內存泄漏、非法訪問等問題。為了解決這些問題&#xff0c;Google 開發了一個強大的工具——AddressSanitizer (ASan)。本文將詳細介紹…

Vue3 內置組件之Teleport

文章目錄 Vue3 內置組件之Teleport概述用法 Vue3 內置組件之Teleport 概述 Teleport 中文翻譯為“瞬間移動”&#xff0c;顧名思義&#xff0c;在Vue3 中 <Teleport> 組件可以將組件中內容移動到指定的目標元素上。 用法 <script setup> import {ref} from &qu…

【我的 PWN 學習手札】IO_FILE 之 FSOP

FSOP&#xff1a;File Stream Oriented Programming 通過劫持 _IO_list_all 指向偽造的 _IO_FILE_plus&#xff0c;進而調用fake IO_FILE 結構體對象中被偽造的vtable指向的惡意函數。 目錄 前言 一、glibc-exit函數淺析 二、FSOP 三、Largebin attack FSOP &#xff08;…

函數指針的用法

函數指標一些相關的用法和注意事項。以下將詳細說明&#xff1a; 1. 基本寫法: 這是最常見且明確的寫法&#xff0c;尤其在處理重載函數時非常有用。 void (GirlFriend::*girl2)(QString) &GirlFriend::hungry;void: 指標所指向的函數的回傳型別。(GirlFriend::*): 表示…

DDcGAN_多分辨率圖像融合的雙鑒別條件生成對抗網絡_y譯文馬佳義

摘要&#xff1a; 在本文中&#xff0c;我們提出了一種新的端到端模型&#xff0c;稱為雙鑒別條件生成對抗網絡&#xff08;DDcGAN&#xff09;&#xff0c;用于融合不同分辨率的紅外和可見光圖像。我們的方法建立了一個生成器和兩個鑒別器之間的對抗博弈。生成器的目的是基于特…

springboot配置線程池

直接上代碼 配置 定義一個配置類 創建一個springboot能掃描到的地方創建一個線程池配置類 配置信息 package com.example.demonew.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import or…

【君正T31開發記錄】12.編譯工具相關總結及介紹

移植交叉工具包的時候&#xff0c;發現這是很多工具的集合包&#xff1b;以及寫makefile的時候&#xff0c;也需要了解下這些工具的作用及用法&#xff0c;這里總結記錄一下常見的工具及相關用法。 g C編譯器&#xff0c;用于編譯C源代碼文件&#xff0c;這個很常見&#xff0…

如何讓面向應急管理的多智能體具備自主決策能力

現代應急管理面對的是復雜、多變、跨部門的災害與事故場景——從自然災害&#xff08;洪水、地震、臺風、火災&#xff09;到公共安全事件&#xff08;疫情、重大安全事故&#xff09;&#xff0c;都需要在極短時間內進行快速響應和全局協同。傳統的集中式指揮模式雖然有效&…

List-順序表--2

目錄 1、ArrayList 2、ArrayList構造方法 3、ArrayList常見方法 4、ArrayList的遍歷 5、ArrayList的擴容機制 6、ArrayList的具體使用 6.1、楊輝三角 6.2、簡單的洗牌算法 1、ArrayList 在集合框架中&#xff0c;ArrayList 是一個普通的類&#xff0c;實現了 List 接口…

lambda用法及其原理

目錄 lambda形式lambda用法1.sort降序2.swap3.捕捉列表 習題解題 lambda形式 [capture-list](parameters)->return type{function boby}[capture-list]&#xff1a;[捕捉列表]用于捕捉函數外的參數&#xff0c;可以為空&#xff0c;但不能省略&#xff1b;(parameters) &am…

基于ASP.NET的動漫網站

一、系統架構與技術實現 系統架構&#xff1a;基于ASP.NET的MVC框架構建&#xff0c;實現網站的層次結構&#xff0c;使得網站更加易于維護和擴展。 技術實現&#xff1a;利用ASP.NET的技術特點&#xff0c;如強大的后端開發能力、豐富的UI控件等&#xff0c;結合前端技術如HT…