在正則表達式中,帶有g(全局)標誌的match 方法通常僅匹配和捕獲非重疊子字符串。考慮以下範例:
const text = "12345"; const regex = /\d{3}/g; const matches = text.match(regex);
在這種情況下,我們預期會得到三個符合項:「123」、「234」和「345」。然而,使用 match 方法,我們只獲得“123”。
match 方法消耗匹配的子字串並提高其索引。捕獲“123”後,索引現在已超過第三個字符,僅留下“45”用於潛在匹配。由於剩餘部分不符合 d{3} 模式,因此找不到進一步的匹配。
為了捕捉重疊匹配,我們需要在某些情況下使用不同的技術正規表示式風格,例如 .Net、Python、PHP 和 Ruby。此技術涉及使用零寬度斷言(具有捕獲組的正向前瞻)來測試輸入字串中的所有位置。 RegExp.lastIndex 屬性手動遞增以在字串中前進,而不會無限循環。
例如,使用 matchAll 方法:
const re = /(?=(\d{3}))/g; const matches = Array.from('12345'.matchAll(re)); console.log(matches.map(match => match[1])); // ["123", "234", "345"]
此方法根據需要捕獲所有三個重疊匹配。請記住,該技術僅在某些正規表示式風格中支援。
以上是為什麼 JavaScript 的「match()」方法只能找出不重疊的正規表示式匹配項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!