sticky プロパティは検索が寛容(sticky)どうかを表します。(この正規表現の lastIndex プロパティによって示されるインデックスからのみの文字列を検索します)。 sticky は正規表現オブジェクトごとの読み取り専用のプロパティです。

RegExp.prototype.sticky のプロパティ属性
書込可能 不可
列挙可能 不可


sticky の値は Boolean です。"y" フラグが使われていたら、true です。そうでなければ、false です。"y" フラグはターゲット文字列においてこの正規表現のlastIndexプロパティによって示されるインデックスからのみマッチすることを示します(それ以降のインデックスからマッチしようとしません)。


"sticky" フラグとともに正規表現を使う

var str = '#foo#';
var regex = /foo/y;

regex.lastIndex = 1;
regex.test(str); // true
regex.lastIndex = 5;
regex.test(str); // false (lastIndex is taken into account with sticky flag)
regex.lastIndex; // 0 (reset after match failure)

アンカーされた sticky フラグ

For several versions, Firefox's SpiderMonkey engine had a bug with regard to the ^ assertion and the sticky flag which allowed expressions starting with the ^ assertion and using the sticky flag to match when they shouldn't. The bug was introduced some time after Firefox 3.6 (which had the sticky flag but not the bug) and fixed in 2015. Perhaps because of the bug, the ES2015 specification specifically calls out the fact that:

パターンとともに y フラグが使用された場合、^ は常に入力の始まりにのみマッチするか、(multilinetrue の場合)最初の行にマッチします。

Examples of correct behavior:

var regex = /^foo/y;
regex.lastIndex = 2;
regex.test('');   // false - index 2 is not the beginning of the string

var regex2 = /^foo/my;
regex2.lastIndex = 2;
regex2.test('');  // false - index 2 is not the beginning of the string or line
regex2.lastIndex = 2;
regex2.test('.\nfoo'); // true - index 2 is the beginning of a line


仕様 状況 コメント
ECMAScript 2015 (6th Edition, ECMA-262)
RegExp.prototype.sticky の定義
標準 初期定義。
ECMAScript Latest Draft (ECMA-262)
RegExp.prototype.sticky の定義


機能ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本対応49133 なし3610
Prototype accessor property (ES2015) あり ?38 ? あり あり
Anchored sticky flag behavior per ES2015 あり あり44 なし あり あり
機能Android webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
基本対応4949 あり436105.0
Prototype accessor property (ES2015) あり あり ?38 あり あり あり
Anchored sticky flag behavior per ES2015 ? あり あり44 ? ? あり



このページの貢献者: woodmix, YuichiNukiyama, lv7777, x2357, shide55
最終更新者: woodmix,