首页 > web前端 > js教程 > 正文

当重复仅保留最后一个匹配项时,如何在 JavaScript 正则表达式中捕获多个组?

DDD
发布: 2024-11-16 22:40:03
原创
647 人浏览过

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"]
登录后复制

但是,正则表达式实际上仅返回最后捕获的match:

["foo bar baz", " baz"]
登录后复制

出现此行为的原因是,在大多数正则表达式风格中,仅保留重复捕获组的最后一个捕获。在 JavaScript 中,重复捕获组只能捕获每次匹配的指定数量的字符串。

要克服此限制,有几个选项:

  • 按分隔符拆分: 如果可能,请考虑在适当的分隔符上拆分字符串,而不是使用重复捕获的正则表达式groups.
  • 使用全局 exec 循环: 使用 /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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板