LoginSignup
2
2

More than 5 years have passed since last update.

正規表現のフラグ変更

Posted at

globalプロパティというのをすっかり忘れてた。というだけの話。

// フラグを設定せずに定数的な扱いにしておく
var PATTERN = /[a-z]/

// これだといかん
'abc'.replace(new RegExp(PATTERN, 'g'), '*'); // TypeError発生

// これならOK
PATTERN.global = true;
'abc'.replace(PATTERN, '*');

// ちなみにこれはエラーにならない(無駄だけど)
'abc'.replace(new RegExp(PATTERN), '*');

Chromeの場合Cannot supply flags when constructing one RegExp from anotherというエラーを吐く。

コンストラクタで正規表現オブジェクトを生成するときにはフラグの上書きができないらしい。
http://ja.scribd.com/doc/86478034/22/new-RegExp-pattern-flags-§15-10-4-1

しかしそもそも

PATTERN.global = true;

これって完璧にプロパティを破壊的に変更しているので、定数的にしてる意味ないよね。プリミティブ値じゃないのを定数的に扱おうとしてること自体ナンセンスだったよね。

というメモでした。

2
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2