Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Regex#execやRegex#testはlastIndexを参照しているので注意

Regex#execやRegex#testを使う場合の注意点です。

実際のところ

myArray = myRe.exec(str)
/*
[ 'Pacem,',
  '',
  'Pacem',
  ',',
  index: 7,
  input: 'Si Vis Pacem, Para Bellum' ]
*/

さて、ここでArray#lastIndexの数字を細工してみます

myRe.lastIndex = 2
//2

myArray = myRe.exec(str)
/*
[ 'Vis',
  '',
  'Vis',
  '',
  index: 3,
  input: 'Si Vis Pacem, Para Bellum' ]
*/

これらメソッドと併用して他の正規表現メソッドを使った場合、
lastIndexが上書きされ意図しない挙動を引き起こす可能性があるって事があります。
使う場合には一時変数に退避させるといった小細工が必要になるでしょう。

参考もと

developer.mozilla.org