正則表達式貪婪模式和非貪婪模式詳解

一、正則表達式貪婪和非貪婪區別

正則表達式中的貪婪模式是指正則表達式在匹配字元串的過程中,儘可能多地匹配字元,而非貪婪模式則相反,它儘可能少的匹配字元。

以下是一個小例子,對於字元串 “abc \d{3,5}? def \d{3,5} ghi”,我們想要匹配其中的數字:

var str = "abc 12345 def 678910 ghi"
var reg1 = /\d{3,5}/g
var reg2 = /\d{3,5}?/g

console.log(str.match(reg1))  // ["12345", "67891"]
console.log(str.match(reg2))  // ["123", "456", "789", "10"]

可以看出,使用貪婪模式的正則表達式匹配到的數字是儘可能多的,而使用非貪婪模式的則是儘可能少的。

二、正則表達式非貪婪模式

在正則表達式中,使用 “?” 可以將其後面的量詞標記為非貪婪模式,例如上面的例子:

var reg = /\d{3,5}?/g

其中 “?「 將貪婪模式改為了非貪婪模式。

非貪婪模式與貪婪模式不同,其將儘可能少的匹配字元,例如:對於字元串 “abc 12345 def 678910 ghi”,使用非貪婪模式匹配數字,則會儘可能的少匹配數字,結果是每次匹配了3位數字。

三、js正則表達式貪婪模式

在 JavaScript 中,默認的正則表達式使用的是貪婪模式,也就是說,不需要使用 “?” 來設置非貪婪模式。例如:

var str = "abc 12345 def 678910 ghi"
var reg = /\d{3,5}/g

console.log(str.match(reg))  // ["12345", "678910"]

可以看到,使用 /\d{3,5}/g 正則表達式匹配到的數字是儘可能多的。

四、正則表達式貪婪和非貪婪

正則表達式貪婪模式和非貪婪模式的使用取決於需求,對於某些需要匹配儘可能多字元的情況可以使用貪婪模式,然而在某些情況下儘可能少的匹配字元可能會更加符合要求,此時可使用非貪婪模式。

以下是一個常見的例子,需要匹配一個 HTML 標籤中的內容:

var str = "<div><p>Hello</p></div>"
var reg1 = /<.+>/g
var reg2 = /<.+?>/g

console.log(str.match(reg1))  // ["<div><p>Hello</p></div>"]
console.log(str.match(reg2))  // ["<div>", "<p>", "</p>", "</div>"]

由於貪婪模式儘可能多的匹配字元,在這個例子中,使用 reg1 正則表達式匹配到的是整個 div 標籤加上其中的內容,而使用 reg2 則是匹配到標籤中的每一個部分。所以在某些情況下,使用非貪婪模式會更加符合需求。

五、正則表達式中的非貪婪模式

正則表達式中的非貪婪模式可以用 “?” 號來實現,例如 “.+?”。這樣表示非貪婪模式,正則表達式在匹配字元串的時候儘可能少的匹配字元。

以下是一個例子,需要將一段 HTML 代碼中的標籤全部替換成 “abc”:

var str = "<div><p>Hello</p></div>"
var reg = /<.+?>/g

console.log(str.replace(reg, "abc"))  // "abcabc"

由於使用了非貪婪模式,”.+?” 會儘可能少的匹配字元,因此只會將標籤替換成一個”abc”。

六、正則表達式貪婪與非貪婪模式區別

正則表達式貪婪模式儘可能多的匹配字元,適用於需要匹配儘可能多字元的情況。而非貪婪模式則儘可能少的匹配字元,適用於需要匹配最短字元串的情況。

我們來看一個簡單的例子,需要匹配字元串中的字母:

var str = "abcde"
var reg1 = /.+/
var reg2 = /.+?/

console.log(str.match(reg1))  // ["abcde"]
console.log(str.match(reg2))  // ["a"]

可以看出,使用貪婪模式的正則表達式匹配到的是整個字元串,而使用非貪婪模式則只匹配到了第一個字元。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/248300.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:27
下一篇 2024-12-12 13:27

相關推薦

  • Python正則表達式search()和match()有什麼區別?

    search()和match()都是Python中的正則表達式函數,它們的作用都是在一個字元串中搜索匹配正則表達式的位置,但它們有著不同的使用場景和返回結果。 一、search()…

    編程 2025-04-29
  • 手機安全模式怎麼解除?

    安全模式是一種手機自身的保護模式,它會禁用第三方應用程序並使用僅限基本系統功能。但有時候,安全模式會使你無法使用手機上的一些重要功能。如果你想解除手機安全模式,可以嘗試以下方法: …

    編程 2025-04-28
  • Qt State Machine與狀態機模式

    本文將介紹Qt State Machine和狀態機模式在Qt中的實現。Qt提供了QStateMachine和QState兩個類,可以方便地實現狀態機模式,並且能有效地處理複雜的、多…

    編程 2025-04-27
  • 顯示C++設計模式

    本文將詳細介紹顯示C++設計模式的概念、類型、優點和代碼實現。 一、概念 C++設計模式是在軟體設計階段定義,用於處理常見問題的可重用解決方案。這些解決方案是經過測試和驗證的,並已…

    編程 2025-04-27
  • MySQL正則表達式替換

    MySQL正則表達式替換是指通過正則表達式對MySQL中的字元串進行替換。在文本處理方面,正則表達式是一種強大的工具,可以方便快捷地進行字元串處理和匹配。在MySQL中,可以使用正…

    編程 2025-04-27
  • Centos7進入單用戶模式的解釋

    本文將介紹如何在Centos7中進入單用戶模式,並從以下幾個方面進行詳細的闡述。 一、Centos7進入單用戶模式的解答 在Centos7中進入單用戶模式需要執行以下步驟: 1. …

    編程 2025-04-27
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性感測器,能夠同時測量加速度和角速度。它由三個感測器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25

發表回復

登錄後才能評論