4

我试过的

var test = "asdfdas ABCD EFGH";
var regex = /^\S+( [A-Z]{4})+$/; 
    // Also tried: /^\S+( [A-Z]{4})+$/g
    // And: /^\S+( [A-Z]{4})+?$/g
var matches = test.match(regex);

我做了一个JSFiddle

我的期望

变量matches应该变成这个数组:

[
  "asdfdas ABCD EFGH",
  " ABCD",
  " EFGH"
]

我得到什么

变量matches实际上是这个数组:

[
  "asdfdas ABCD EFGH",
  " EFGH"
]

我的想法

我的猜测是捕获组和/或$逻辑缺少一些东西。任何帮助,将不胜感激。(我知道我可以弄清楚如何在多个正则表达式中做到这一点,但我想了解这里发生了什么。)

4

1 回答 1

3

是的,这正是它的作用;你没有做错任何事。当一个组被赋予一个量词时,它只捕获它的最后一个匹配,这就是它在 JavaScript 中所做的一切。如您所说,一般解决方法是使用多个正则表达式,例如

var test = "asdfdas ABCD EFGH";
var match = test.match(/^\S+((?: [A-Z]{4})+)$/); // capture all repetitions
var matches = match[1].match(/ [A-Z]{4}/g); // match again to get individual ones
于 2014-11-25T16:09:50.843 回答