2011-08-02 8 views
2

(私の質問は混乱しているので、下の例/説明を参照してください)サブ表現の数を増やすことなく、サブ表現内の何かのインスタンスをn +にマッチさせる方法はありますか?

大規模な正規表現でたくさんのものをマッチングさせて、一致した部分式を見つけようとしています。問題は、私の部分式のうちの1つに、部分式のインデックスをスローする「コレクション/シーケンス」があるときです。

例えば、下式では、「foo」というのチェックがインデックス3で次のようになります。

/(one)|(two)|(foo)/g 

しかし、このいずれかで、それはインデックス4時です(はい、これはダム正規表現ですが、例)フィット:

/(one)|(([tT][wW])?o)|(foo)/g 

あなたがしようとすると "foo" を見つけるために、以下のコードを使用した場合は、のようなものを取得したい:

var str = "Some string that only matches foo"; 

while (match = reg.exec(str)) 
{ 
    for (var i = 1; i < match.length; i++) 
    { 
     //Should be 3 but it's not 
     if(match[ i ] !== undefined) break; 
    } 

    //This won't match foo, because it's now the wrong index 
    alert(match[ i ]); 
} 

"regex.exec"で "match"に返されたインデックスに影響を与えずに、サブ式のかっこ内で "1つ以上の"型式を実行するにはどうすればよいですか?

(注:これはどのような方法では不明であるなら、私に教えすることを躊躇しないと私はより良い例と完全なサンプルコードを思い付くしようとするでしょう)

答えて

4

(pattern)試合と試合をキャプチャします。一致するがキャプチャしない場合は、fooグループが式で4番目に取得されたグループであるため、fooは常に上記の正規表現でインデックス4になるため、(?:pattern)

+0

おかげだろう、それはそれです!私はstackoverflowが私にできるように8分で答えとしてマークします。 –

1

を使用します。あなたがグループは以下のように捉えるべきではないことを示すために?:を使用することができます。

/(one)|((?:[tT][wW])?o)|(foo)/g 

今fooがインデックスに戻って3

+0

ありがとう、これは非常に明確になります! :) –

関連する問題