有效地找到RegExp搜索中匹配的组

时间:2013-06-17 14:28:03

标签: javascript regex

当我的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数组显示哪些组进行了捕获,但我认为没有办法快速找到每个给定的匹配,哪个组匹配而不迭代数组。这在以编程方式构建大型正则表达式并且迭代效率低下的情况下非常有用。

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

1 个答案:

答案 0 :(得分:2)

你没有遗漏任何东西;迭代数组是唯一的方法。

有多少组可以通过匹配进行迭代实际上是一个性能问题?如果你不需要一个小组,你总是可以让它不被捕获,但是......