问题
I have a regexp:
/(alpha)|(beta)|(gamma)/gi
Some text to match against:
Betamax. Digamma. Alphabet. Hebetation.
The matches are:
beta, gamma, alpha, beta
The values I am looking would be:
1,2,0,1
...can I ascertain the index of the group that matched in the regexp?
回答1:
To access the groups, you will need to use .exec() repeatedly:
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]));
If you want the indizes zero-based, you could use
nums.push(match.slice(1).indexOf(match[0]));
回答2:
Build your regex from an array of strings, and then lookup the matches with indexOf.
回答3:
If we consider the exact sample you provided, the below will work:
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);
I leave it to you to make the content of the loop more dynamic / generic :p
来源:https://stackoverflow.com/questions/14912419/get-the-index-of-the-group-that-matched-in-a-regexp