首頁 >web前端 >js教程 >當重複僅保留最後一個符合項目時,如何在 JavaScript 正規表示式中擷取多個群組?

當重複僅保留最後一個符合項目時,如何在 JavaScript 正規表示式中擷取多個群組?

DDD
DDD原創
2024-11-16 22:40:03734瀏覽

How can you capture multiple groups in a JavaScript regexp when the repetition only keeps the last match?

在JavaScript 正規表示式中擷取多個群組

在JavaScript 中使用正規表示式時,可以擷取字串中的多個匹配組。但是,可以捕獲和檢索的組數量是有限的。

考慮以下 JavaScript 正規表示式:

"foo bar baz".match(/^(\s*\w+)+$/)

人們可能會期望此正規表示式會傳回包含整個陣列的陣列字串「foo bar baz」以及每個單獨的單字:

["foo bar baz", "foo", " bar", " baz"]

但是,正則表達式實際上僅返回最後捕獲的匹配:

["foo bar baz", " baz"]

出現此行為的原因是,在大多數情況下正規表示式風格,僅保留重複捕獲組的最後一次捕獲。在 JavaScript 中,重複捕獲組只能捕獲每次匹配的指定數量的字串。

要克服此限制,有幾個選項:

  • 按分隔符號拆分: 如果可能,請考慮在適當的分隔符號上拆分字串,而不是使用具有重複捕獲組的正規表示式。
  • 使用全域執行循環: 匹配重複組在一場比賽中使用 /pattern/g 標誌,然後使用 exec 循環處理結果。請注意,此方法並不完全等同於重複捕獲組。
  • 多層匹配: 在一個匹配中捕獲重複組,然後使用第二個正規表示式將該匹配分開。

範例:

符合字串使用多層符合的文字:

var text = "a;b;<c;d;e;f>;g;h;i;<no no no>;j;k;<xx;yy;zz>;";

var r = /<(\w+(;\w+)*)>/g;

var match;
while ((match = r.exec(text)) != null) {
  print(match[1].split(";"));
}

此方法使用兩級匹配從字串中提取單字。

以上是當重複僅保留最後一個符合項目時,如何在 JavaScript 正規表示式中擷取多個群組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn