首页 > web前端 > js教程 > 如何正确访问 JavaScript 正则表达式中的匹配组?

如何正确访问 JavaScript 正则表达式中的匹配组?

Barbara Streisand
发布: 2024-12-26 13:08:14
原创
123 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板