访问 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中文网其他相关文章!