7

当我RegExp有多个捕获组时,我想知道哪个组进行了捕获(或者至少是第一个/最后一个这样的组,如果有多个)。如果你熟悉 Python,这基本上相当于re.MatchObject.lastgroup. 一些代码使其更清晰:

var re_captures = new RegExp("(\\d+)|(for)|(\\w+)", "g");
var str = " for me 20 boxes please";
var result;

while ((result = re_captures.exec(str)) !== null) {
  console.log(result[0], 'at', result.index, result.slice(1));
}

它打印:

for at 1 [ undefined, 'for', undefined ]
me at 5 [ undefined, undefined, 'me' ]
20 at 8 [ '20', undefined, undefined ]
boxes at 11 [ undefined, undefined, 'boxes' ]
please at 17 [ undefined, undefined, 'please' ]

result数组显示了哪些组进行了捕获,但我看不出有什么方法可以快速找出每个给定的匹配项,哪些组匹配,而无需遍历数组。这在以编程方式构建大型正则表达式并且迭代效率低下的情况下很有用。

我错过了一些明显的东西,还是不可能?

4

1 回答 1

3

你不会错过任何东西;遍历数组是唯一的方法。

有多少组可以迭代匹配实际上是一个性能问题?如果您不需要组,您可以随时将其设为非捕获,但是……</p>

于 2013-06-17T14:30:24.307 回答