概要
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
参考サイト
defined regex in outer scope make different result in javascript?
I make an example here: var reg = /\s+/g; function testfn() { // reg = /\s+/g; var res = reg.test('mike ross'); var showEle = document.querySelector("#show"); showEle.inn...