読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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

javascript/node.js regex

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