首頁 > web前端 > js教程 > 如何獲得正規表示式和全域標誌的重疊匹配?

如何獲得正規表示式和全域標誌的重疊匹配?

Linda Hamilton
發布: 2024-12-13 02:24:16
原創
546 人瀏覽過

How Can I Get Overlapping Matches with Regular Expressions and the Global Flag?

與正規表示式重疊字串匹配

當使用具有全域標誌(/g)的正規表示式來匹配字串時,您可以遇到重疊匹配未如預期返回的情況。例如,在字串“12345”中,使用 /d{3}/g 匹配只會產生匹配“123”,而不是 [“123”, “234”, “345”]。

原因因為這種行為在於正規表示式與全域標誌相符的本質。正規表示式引擎讀取並使用匹配的子字串,將其索引前進到緊接在匹配之後的位置。本例中,在配對「123」後,索引移動到位置4,只留下「45」進行後續匹配。

重疊匹配技巧

實現重疊匹配,可以用多種方法使用:

  • 零寬度斷言:

    • 利用捕獲組的正向前瞻來測試輸入字串中的所有位置.
    • 手動推進RegExp.lastIndex 以避免無限循環。
    • 受 .NET、Python、PHP、Ruby 和 Java 支援(使用 matchAll)。

範例(使用matchAll 的JavaScript) :

const re = /(?=(\d{3}))/g;
console.log(Array.from('12345'.matchAll(re), x => x[1]));
登入後複製

此程式碼使用正向前瞻測試字串中與三瞻個連續數字匹配的所有位置。結果是匹配子字串的數組,包括 ["123", "234", "345"]。

其他注意事項:

  • 零-width 斷言僅適用於需要匹配重疊子字串的情況。
  • 一些正規表示式引擎具有重疊匹配的內建支援(例如 PHP 和 Ruby 中的 PCRE)。
  • 替代方法可能包括使用帶有子字串或分割函數的循環。

以上是如何獲得正規表示式和全域標誌的重疊匹配?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板