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 フラグ

Firefox の SpiderMonkey のとあるバージョンでは、^ アサーションで始まり、stickyフラグを使うことでマッチしない式を許可するバグがありました。このバグはFirefox 3.6 以降(それ以前は sticky が実装されていてもバグはありませんでした)で発生し、2015年に修正されました。ES2015の仕様では、おそらくそのバグのために、以下のとおり定められています。

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

以下は正しい挙動の例です。

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

var regex2 = /^foo/my;
regex2.lastIndex = 2;
regex2.test('..foo');  // 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 の定義
ドラフト  

ブラウザ実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
基本対応Chrome 完全対応 49Edge 完全対応 13Firefox 完全対応 3IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Edge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 あり
Prototype accessor property (ES2015)Chrome 完全対応 ありEdge ? Firefox 完全対応 38IE ? Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile ? Firefox Android 完全対応 38Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
Anchored sticky flag behavior per ES2015Chrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 44IE 未対応 なしOpera 完全対応 ありSafari 完全対応 ありWebView Android ? Chrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 44Opera Android ? Safari iOS ? Samsung Internet Android 完全対応 ありnodejs ?

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明

関連情報

ドキュメントのタグと貢献者

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