【JavaScript】正規表現にgオプションを指定して複数回実行する場合の注意点

概要

JavaScriptの正規表現オブジェクトのtestメソッドをgオプションを指定して実行した場合、正規表現オブジェクト内に次の開始位置が保持される。
(lastIndexプロパティ)

そのため、同じ正規表現オブジェクトを複数回使い回すと、2回目以降は開始位置が先頭ではなくlastIndexの位置からとなる。

よって、同じ文字列に対して同じ正規表現オブジェクトのtestメソッドを実行しても、1回目と2回目で結果が異なる可能性がある。

const regex = /^123$/g;
console.log(regex.test('123')); // true
console.log(regex.test('123')); // false

以下のように、gオプションを指定しない、または毎回正規表現オブジェクトを生成すれば、実行結果は同じものとなる。

const regex = /^123$/;
console.log(regex.test('123')); // true
console.log(regex.test('123')); // true

console.log(/^123$/g.test('123')); // true
console.log(/^123$/g.test('123')); // true

参考サイト

https://stackoverflow.com/questions/35355770/defined-regex-in-outer-scope-make-different-result-in-javascript


【新しい記事】

【古い記事】

コメントを残す

メールアドレスが公開されることはありません。