首頁 > web前端 > js教程 > 如何正確存取 JavaScript 正規表示式中的匹配組?

如何正確存取 JavaScript 正規表示式中的匹配組?

Barbara Streisand
發布: 2024-12-26 13:08:14
原創
193 人瀏覽過

How to Correctly Access Matched Groups in JavaScript Regular Expressions?

如何在 JavaScript 正規表示式中存取符合群組

可以使用 exec() 方法存取 JavaScript 中正規表示式擷取的子群組。此方法傳回一個類似數組的對象,其中包含表達式所做的匹配。

為了說明這一點,請考慮以下範例:

var myString = "something format_abc"; // Obtain "abc"

const arr = /(?:^|\s)format_(.*?)(?:\s|$)/.exec(myString);

console.log(arr); // Outputs: [" format_abc", "abc"]
console.log(arr[1]); // Outputs: undefined (the issue)
console.log(arr[0]); // Outputs: format_undefined (another issue)
登入後複製

預期輸出是取得子群組「abc」作為 arr 陣列的第二個元素。然而,存取 arr[1] 和 arr[0] 分別會導致未定義和不正確的值。

解決未定義的輸出:

缺少值arr[1] 是由於 .*?正規表示式中使用的非貪婪量詞。此量詞捕捉盡可能少的字元數,從而產生不帶分隔符號的字串“format_abc”。

要解決此問題,請使用貪婪量詞.* 代替:

/(?:^|\s)format_(.*)(?:\s|$)/
登入後複製

修正不正確的字串輸出:

出現arr [0] 問題來自使用控制台的類似printf 的格式。 format_%A 中的特殊字元 % 嘗試替換下一個遺失的參數的值。

要解決此問題,請轉義正規表示式中的%:

/(?:^|\s)format_(.*?)(?:\s|$)/
登入後複製

使用透過這些修改,可以實現正確的輸出:

[" format_abc", "abc"]
console.log(arr[1]); // Outputs: "abc"
console.log(arr[0]); // Outputs: " format_abc"
登入後複製

透過matchAll() 存取匹配組(ECMAScript 2020及更高版本):

String.prototype.matchAll() 方法提供了一種現代且更直觀的方法來迭代字串中的多個匹配項。它會傳回一個迭代器,可以如下使用:

const string = "something format_abc";
const regexp = /(?:^|\s)format_(.*?)(?:\s|$)/g;
const matches = string.matchAll(regexp);

for (const match of matches) {
  console.log(match);
  console.log(match.index);
}
登入後複製

以上是如何正確存取 JavaScript 正規表示式中的匹配組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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