2017-11-13 17 views
-1

値を確認する条件が2つある場合、2つの条件は同じです。Javascript:正規表現で条件がうまくいかない場合は多く

条件を2回使用する必要があります。

ここで以下のコード:

regexp = new RegExp("[458]", "gi"); 
valuesArray = [5, 8]; 

for(var i = 0; i < valuesArray.length; i++) 
{ 
    if(regexp.test(valuesArray[i]) == true) 
    { 
     console.log("true : "+valuesArray[i]); 
    } 

    if(regexp.test(valuesArray[i]) == false) 
    { 
     console.log("false : "+valuesArray[i]); 
    } 
} 

JavaScriptコンソール出力がある:

true : 5 
false : 5 
true : 8 
false : 8 

が、5と8が[458]正規表現であるため、これは非常に正規表現テストが返さなければならない、(あるべきですtrue):

true : 5 
true : 8 

なぜそれが機能しないのですか?アイデアはありますか?

ありがとうございます。

+2

のでregexp = new RegExp("[458]", "i");代わりのregexp = new RegExp("[458]", "gi");

てみてください;' – gurvinder372

+2

また、反対の論理を持つ同じ条件の代わりに 'else'を使います。特に条件内の関数が(この場合のように)副作用を持っている場合 –

+0

そして条件に '== true'は必要ありません。 (regexp.test(...)){/ * ... * /} else {/ * ...} ' –

答えて

0

グローバルフラグ `新しい正規表現を( "[458]"、 "I")を削除し

g 
global match; find all matches rather than stopping after the first match 
i 
ignore case 

regexp = new RegExp("[458]", "i"); 
 
valuesArray = [5, 8]; 
 

 
for (var i = 0; i < valuesArray.length; i++) { 
 
    if (regexp.test(valuesArray[i]) == true) { 
 
    console.log("true : " + valuesArray[i]); 
 
    } 
 

 
    if (regexp.test(valuesArray[i]) == false) { 
 
    console.log("false : " + valuesArray[i]); 
 
    } 
 
}

+0

なぜですか?これを行うことの結果の説明はここで役立つでしょう。 – Liam

+2

さらに明らかに重複した質問には答えないでください。 dupetargetを見つけて、代わりに閉じるように投票します(おそらく、ターゲットがどのように適用されるかを示すコメントが付いています)。 –

+0

グローバルフラグ付きの正規表現でのtest()の使用 正規表現にグローバルフラグが設定されている場合、test()は正規表現のlastIndexを進めます。 test()を続けて使用すると、lastIndexで指定されたstrの部分文字列で検索が開始されます(exec()もlastIndexプロパティを前に進めます)。 – totoaussi

関連する問題