[英]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/來解釋正則表達式。
這就是 Debuggex 解釋相關表達式的方式
此外,如果您在 Chrome 控制台中調試它,這就是您應該得到的
我希望這可以幫助您更好地理解這一點
模式([^\\d]*)(\\d*)([^\\w]*)
用於匹配輸入字符串abc12345#$*%
三個部分。
([^\\d]*)
- 使用否定[^]
匹配任何非數字零次或多次,在本例中為abc
。(\\d*)
- 匹配前一個捕獲組之后的零個或多個數字[0-9]
,在本例中為12345
。([^\\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() 。
([^\\d]*)
匹配 0 個或多個non 。 可以寫成([\\D]*)
(\\d*)
匹配 0 個或多個數字([^\\w]*)
匹配 0 個或多個非字符。 可以寫成([\\W]*)
有關更好的解釋,請參閱: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.