2

我有一个正则表达式:

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

一些要匹配的文本:

Betamax. Digamma. Alphabet. Hebetation.

比赛是:

beta, gamma, alpha, beta

我正在寻找的价值观是:

1,2,0,1

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

4

3 回答 3

5

访问组,您需要.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]));

如果您希望索引从零开始,您可以使用

    nums.push(match.slice(1).indexOf(match[0]));
于 2013-02-16T16:35:47.040 回答
1

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

于 2013-02-16T16:29:49.423 回答
1

如果我们考虑您提供的确切样本,以下将起作用:

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);

我把它留给你,让循环的内容更加动态/通用:p

于 2013-02-16T16:34:51.777 回答