regex ‘flag’ y ‘は何をしますか?

flags javascript regex
regex ‘flag’ y ‘は何をしますか?

MDNは言う:

_
ターゲット文字列の現在の位置から始まる「スティッキー」検索を実行するには、yフラグを使用します。
_

よくわかりません。

  30  6


ベストアンサー

正規表現オブジェクトには「lastIndex」プロパティがあり、これは「g」(グローバル)フラグと「y」(スティッキー)フラグに応じてさまざまな方法で使用されます。 「y」(スティッキー)フラグは、「lastIndex」で一致するものを探し、「lastIndex」でのみ一致するものを検索するように正規表現に指示します(文字列の前後ではありません)。

例は1024ワードに相当します。

var str =  "a0bc1";
// Indexes: 01234

var rexWithout = /\d/;
var rexWith    = /\d/y;

// Without:
rexWithout.lastIndex = 2;          // (This is a no-op, because the regex
                                   // doesn't have either g or y.)
console.log(rexWithout.exec(str)); // ["0"], found at index 1, because without
                                   // the g or y flag, the search is always from
                                   // index 0

// With, unsuccessful:
rexWith.lastIndex = 2;             // Says to *only* match at index 2.
console.log(rexWith.exec(str));    // => null, there's no match at index 2,
                                   // only earlier (index 1) or later (index 4)

// With, successful:
rexWith.lastIndex = 1;             // Says to *only* match at index 1.
console.log(rexWith.exec(str));    // => ["0"], there was a match at index 1.

// With, successful again:
rexWith.lastIndex = 4;             // Says to *only* match at index 4.
console.log(rexWith.exec(str));    // => ["1"], there was a match at index 4.
.as-console-wrapper {
  max-height: 100% !important;
}

” ” ‘

互換性に関する注意

FirefoxのSpiderMonkey JavaScriptエンジンには長年「y」フラグが付いていましたが、ES2015(2015年6月)まで仕様の一部ではありませんでした。 また、かなり長い間、Firefoxには ^`アサーションに関してhttps://bugzilla.mozilla.org/show_bug.cgi?id=773687[yフラグの処理のバグ]がありましたが、 Firefox 43(バグがある)とFirefox 47(ない)の間のどこかで修正されました。 Firefoxの非常に古いバージョン(3.6など)には `y`があり、バグはなかったため、後に発生した回帰( y`フラグの動作が定義されていない)で修正されました。

40


あなたはここで例を見つけることができます:

3


あなたはここで例を見つけることができます:

私見を除いて、例は

var regex = /^(\S+) line\n?/y;

の代わりに

var regex = /(\S+) line\n?/y;

というのは、この行ではコードが同じ結果を与えるからです

var regex = /(\S+) line\n?/y;

or

var regex = /(\S+) line\n?/g;

0


タイトルとURLをコピーしました