获取在正则表达式中匹配的组的索引?

问题描述:

我有一个正则表达式:获取在正则表达式中匹配的组的索引?

/(alpha)|(beta)|(gamma)/gi 

一些文字来匹配:

Betamax. Digamma. Alphabet. Hebetation. 

的匹配为:

beta, gamma, alpha, beta 

我期待值是:

1,2,0,1 

...我可以确定在正则表达式中匹配的组的索引吗?

access the groups,你将需要使用.exec()反复:

var regex = /(alpha)|(beta)|(gamma)/gi, 
    str = "Betamax. Digamma. Alphabet. Hebetation."; 
for (var nums = [], match; match = regex.exec(str);) 
    nums.push(match.lastIndexOf(match[0])); 

如果你想indizes从零开始,你可以使用

nums.push(match.slice(1).indexOf(match[0])); 
+0

这是我最喜欢的,我喜欢你使用结果的操纵来获得零基结果。 – 2013-02-16 16:46:06

+1

是的,它看起来不错,并允许我们使用'indexOf'而不是后向搜索。虽然,只是将“ - 1”附加到第一个将会更短,更高效:) – Bergi 2013-02-16 16:48:49

从一个字符串数组中构建正则表达式,然后用indexOf查找匹配项。

如果我们考虑您所提供的确切的样品,下面将工作:

var r = /(alpha)|(beta)|(gamma)/gi; 
var s = "Betamax. Digammas. Alphabet. Habetation."; 

var matched_indexes = []; 
var cur_match = null; 

while (cur_match = r.exec(s)) 
{ 
    matched_indexes.push(cur_match[1] ? 0 : cur_match[2] ? 1 : 2); 
} 

console.log(matched_indexes); 

我把它交给你,使循环更加动态/通用的内容:对