在 JavaScript 正则表达式中捕获多个组
在 JavaScript 中使用正则表达式时,可以捕获字符串中的多个匹配组。但是,可以捕获和检索的组数量是有限的。
考虑以下 JavaScript 正则表达式:
"foo bar baz".match(/^(\s*\w+)+$/)
人们可能期望此正则表达式返回包含整个数组的数组字符串“foo bar baz”以及每个单独的单词:
["foo bar baz", "foo", " bar", " baz"]
但是,正则表达式实际上仅返回最后捕获的match:
["foo bar baz", " baz"]
出现此行为的原因是,在大多数正则表达式风格中,仅保留重复捕获组的最后一个捕获。在 JavaScript 中,重复捕获组只能捕获每次匹配的指定数量的字符串。
要克服此限制,有几个选项:
示例:
匹配字符串<一些话;这里>在使用多级匹配的文本中:
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中文网其他相关文章!