RegExp.prototype.sticky
sticky
プロパティは、検索が粘着的 (sticky) である (文字列内の検索を、この正規表現の lastIndex
プロパティで示されたインデックスからのみ開始する) かどうかを表します。 sticky
は個々の正規表現オブジェクトが持つ読み取り専用のプロパティです。
試してみましょう
RegExp.prototype.sticky のプロパティ属性 |
|
---|---|
書込可能 | 不可 |
列挙可能 | 不可 |
設定可能 | 可 |
解説
例
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
フラグが使用された場合、 ^ は常に入力の始まりにのみ一致するか、 (multiline
がtrue
の場合) 最初の行に一致します。
以下は正しい挙動の例です。
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
仕様書
Specification |
---|
ECMAScript Language Specification # sec-get-regexp.prototype.sticky |
ブラウザーの互換性
BCD tables only load in the browser