JS.next

JavaScriptの最新実装情報を追うブログ

正規表現のyフラグが実装された

概要

文字列の特定の位置からマッチさせたい時にyフラグを用いると、lastIndexの位置からのみマッチするようにできる。


var re = /Test/y
re.sticky             // true

re.lastIndex          // 0
re.test( 'Test' )     // true
re.lastIndex          // 4

re.lastIndex = 2
re.test( 'xTest' )    // false

re.lastIndex = 2
re.test( 'xyTest' )   // true

re.lastIndex = 2
re.test( 'xyzTest' )  // false


注意

このフラグはFirefoxで昔から実装されているが、それとは一部仕様が異なる。
具体的にはFirefoxの仕様では、正規表現中の「^」が文頭の代わりにlastIndexの位置にマッチする。
また、同時にmフラグも指定されている場合は、『lastIndex以降の行頭』の位置にもマッチするようになるが、
ES2015の仕様では文頭のみ、またmフラグも指定されている場合は『lastIndexかつ行頭』の位置にのみマッチする。

var re1 = /^Test/y

re1.lastIndex = 2
re1.test('xyTest')     // ES2015->false, OldFx->true


var re2 = /^Test/my

re2.lastIndex = 2
re2.test('xyz\nTest')  // ES2015->false, OldFx->true


var re3 = /^Test/my  

re3.lastIndex = 2
re3.test('x\nTest')   // ES2015->true, OldFx->true


実装されるバージョン

V8 3.29.81