ホームページ  >  に質問  >  本文

グローバル フラグの正規表現によって誤った出力が発生するのはなぜですか?

<p>グローバル フラグと大文字小文字を区別しないフラグを使用すると、この正規表現の何が問題になりますか?クエリはユーザーが生成した入力です。結果は [true, true] になるはずです。 </p> <pre class="brush:php;toolbar:false;">var query = 'Foo B'; var re = 新しい RegExp(クエリ, 'gi'); var 結果 = []; result.push(re.test('Foo Bar')); result.push(re.test('Foo Bar')); //結果は [true, false]</pre> となります。 <時間> <p> <pre class="snippet-code-js lang-js prettyprint-override"><code>var reg = /^a$/g; for(i = 0; i < 10;) console.log(reg.test("a"));</code></pre> </p>
P粉282627613P粉282627613424日前485

全員に返信(2)返信します

  • P粉399090746

    P粉3990907462023-08-23 00:35:02

    RegExp オブジェクトを使用し、それを複数回実行しています。実行のたびに、最後に一致したインデックスから継続されます。

    毎回実行する前に、正規表現を「リセット」して最初から開始する必要があります。

    リーリー

    そうは言っても、毎回新しい RegExp オブジェクトを作成する方が読みやすいかもしれません (RegExp はすでにキャッシュされているため、オーバーヘッドは最小限です)。 リーリー

    返事
    0
  • P粉523335026

    P粉5233350262023-08-23 00:21:13

    g フラグを指定して RegExp オブジェクトを使用すると、一致が発生した lastIndex が追跡されるため、以降は一致します。 0 からではなく、最後に使用したインデックスから開始します。例を見てみましょう:

    リーリー

    返事
    0
  • キャンセル返事