2017-11-01 5 views
3

私はこれに固執されていました愚かな号は現在時間です。私はそれが馬鹿だと知っていますが、私は本当に私が逃しているか分からない。どんな助けもありがとう。JavaScript RegExp - g修飾子が機能しない

はここ
var objReg = /touch/g; 
var str = "abc touch def touch"; 
var arr = objReg.exec(str); 

私は配列arrは、2つの要素を含むことを期待するが、それは唯一私がg修飾子を入れて確認しましたにもかかわらず、第一の要素が含まれています

は、ここに私の問題です。

ここで何が行われるのですか?

デバッグ:下の画像に示すように、アレイは、ちょうど1要素を持っている(インデックス= 0)

enter image description here

+2

。あるいは、 'str.match(re)'を使うこともできます。これは、単に一致する配列を返します。 –

答えて

4

は、あなたが望む効果を得るために、あなたはString.prototype.match()とのマッチングを行う必要があります。

RegExp .exec()関数は、gフラグに関しても同じように動作しません。フラグです何か.exec()ですが、.match()はありません。

+0

十分にありがとうございます。これは私の問題を解決した: ')。私はできるだけ早く答えを受け入れるでしょう – ManJoey

5

g修飾子は、正規表現オブジェクトに状態を維持させます。最後のマッチ後のインデックスを追跡します。 .exec()を使用する場合は、ループを使用することができ、適切な時点で文字列の検索が自動的に開始されます。あなたは、戻り値が `null`なのであるまで` RegExp.exec`を繰り返す必要が

var objReg = /touch/g; 
 
var str = "abc touch def touch"; 
 
var match = null; 
 
var arr = []; 
 

 
console.log(objReg.lastIndex); 
 

 
while ((match = objReg.exec(str))) { 
 
    arr.push(match[0]); 
 
    console.log(objReg.lastIndex); 
 
} 
 

 
console.log(objReg.lastIndex); 
 

 
console.log(arr);

+0

あなたの答えをありがとう。 – ManJoey

+0

ようこそ。 – llama

関連する問題