我尝试过的
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"
]
我的想法
我的猜测是,捕获组和/或$
逻辑缺少一些东西。任何帮助将不胜感激。(我知道我可以弄清楚如何在多个正则表达式中做到这一点,但我想了解这里发生了什么。
是的,这正是它的作用;你没有做错任何事。当一个组被赋予一个量词时,它只捕获它的最后一个匹配项,这就是它在 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