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 に答える