グローバル フラグの正規表現によって誤った出力が発生するのはなぜですか?
P粉282627613
P粉282627613 2023-08-22 19:11:39
0
2
543
<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粉282627613
P粉282627613

全員に返信(2)
P粉399090746

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

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

リーリー

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

いいねを押す +0
P粉523335026

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

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート