簡體   English   中英

這個捕獲組在 Javascript 的替換函數文檔中的這個正則表達式中做了什么?

[英]What is this capture group doing in this regex expression in the replace function documentation in Javascript?

這是代碼:

我認為以下示例會將 newString 設置為:

'abc - 12345 - #$*%':

function replacer(match, p1, p2, p3, offset, string) {
  // p1 is nondigits, p2 digits, and p3 non-alphanumerics
  return [p1, p2, p3].join(' - ');
}

var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);

我不確定 3 個捕獲組在正則表達式中做什么? 是否第一個擬態:

([^/d]*)

捕捉所有不是數字的東西?

第二組是否捕獲所有數字?

第三組是否捕獲了不是字母數字字符(字母或數字)的所有內容?

什么被傳遞到替換函數中? 如果替換函數中的替換函數沒有接收任何參數,那么 p1、p2 和 p3 會是什么?

我經常使用https://regex101.com/https://www.debuggex.com/來解釋正則表達式。

這就是 Regex101 解釋相關表達式的方式正則表達式101

這就是 Debuggex 解釋相關表達式的方式正則表達式可視化

調試器

此外,如果您在 Chrome 控制台中調試它,這就是您應該得到的鉻合金

我希望這可以幫助您更好地理解這一點

模式([^\\d]*)(\\d*)([^\\w]*)用於匹配輸入字符串abc12345#$*%三個部分

  1. ([^\\d]*) - 使用否定[^]匹配任何非數字零次或多次,在本例中為abc
  2. (\\d*) - 匹配前一個捕獲組之后的零個或多個數字[0-9] ,在本例中為12345
  3. ([^\\w]*) - 匹配前一個捕獲組之后不在集合[A-Za-z0-9_]中的任何字符,所以非常特殊的字符。 在這種情況下#$*%

你的replacer的功能實際上沒有取代那些捕獲組,但保存它們,並把破折號-他們之間。

因為有三個捕獲組(如上所述),三個參數p1 - p3代表那些。

函數參數是根據您的模式中的捕獲組數量動態填充的(JavaScript 悠閑性質的一部分)。 因此,如果您有 4 個捕獲組,則將有四個捕獲組參數:

function replacer(match, p1, p2, p3, p4, offset, string) { ... }

參數名稱顯然並不重要,只是您想在函數中調用它們的任何名稱。

replacer函數采用三個捕獲組參數並返回以下內容: [p1, p2, p3].join(' - ') 這只是在捕獲組之間放置- (兩側有空格)並返回abc - 12345 - #$*%

進一步閱讀join函數: Array.prototype.join()

  1. ([^\\d]*)匹配 0 個或多個non 可以寫成([\\D]*)
  2. (\\d*)匹配 0 個或多個數字
  3. ([^\\w]*)匹配 0 個或多個非字符。 可以寫成([\\W]*)
  4. 傳遞給替換函數的參數是:匹配的子字符串,每個捕獲的組(如果沒有捕獲到空字符串),必須檢查的字符串的偏移量(最后一個參數)

有關更好的解釋,請參閱: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM