存取JavaScript 正規表示式中的符合分組
當使用正規表示式來符合字串中的模式時,通常需要存取字串的特定部分匹配的文字。 JavaScript 提供了多種方法來實現此目的。
在您的範例中,您正確使用了帶括號的正規表示式來捕獲字串的一部分。但是,您遇到的問題不在於正規表示式本身,而是在於您存取匹配組的方式。
使用.exec() 存取組
. exec() 方法傳回一個數組,其中包含整個匹配字串作為第一個元素,後面跟著任何捕獲的組。要存取第一個捕獲組(範例中的「abc」部分),您可以使用arr[1]:
let myString = "something format_abc"; let arr = /(?:^|\s)format_(.*?)(?:\s|$)/.exec(myString); console.log(arr[1]); // Prints: abc
使用命名捕獲組
您也可以使用正規表示式語法命名擷取群組,例如(?
let myString = "something format_abc"; let arr = /(?:^|\s)format_(?<text>.*?)(?:\s|$)/.exec(myString); console.log(arr.groups.text); // Prints: abc
具有命名捕獲組的替代語法:
在 ECMAScript 2018中,您可以使用略有不同的命名捕獲組的語法,將組名稱括在大寫字母中大括號:
let myString = "something format_abc"; let arr = /(?:^|\s)format_({text}.*?)(?:\s|$)/.exec(myString); console.log(arr.groups.text); // Prints: abc
使用.matchAll() 匹配多個出現
.matchAll() 方法是在ECMAScript 2020 中引入的,並提供了基於迭代器的API符合字串中多次出現的模式。它會傳回一個迭代器,該迭代器為每個匹配生成一個數組形式的匹配結果,您可以存取每個結果中捕獲的組。
要在範例中使用 .matchAll():
let myString = "something format_abc and something format_xyz"; let matches = myString.matchAll(/(?:^|\s)format_(.*?)(?:\s|$)/g); for (let match of matches) { console.log(match[1]); // Prints: abc, then xyz }
以上是如何存取 JavaScript 正規表示式中的匹配組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!