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('..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 ?

凡例

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

関連情報

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

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