練炭ブログ

萌え壁紙、Irvine、DMonkey、Proxomitron などの情報を扱ってます。

DMonkey: RegExp.$0~$9 の書き換えの影響範囲

コメントなし»

RegExp.$0~$9 と、正規表現リテラル /…/ で生成した全ての regexp インスタンスの $0~$9 は共有されている。

したがって、
RegExp.$1 = 123;
のようにすると全ての regexp インスタンスの $1 も変更される。

new RegExp() で生成した RegExp インスタンスでマッチングを行うと当該インスタンスの $0~$9 が更新される。

また同時に RegExp.$0~$9 も更新されるが、これは全ての regexp インスタンスの $0~$9 とも共有されているのでそちらの値も更新される。

一方、
var r = new RegExp ('a'); r.$1 = 123;
のようにすると当該インスタンスの $1 だけが書き換わる。

このように、RegExp インスタンスでは、正規表現マッチングによる $0~$9 の更新と代入式による $0~$9 の書き換えでは影響範囲が異なる。

ちなみに、regexp インスタンスに対して
/a/.$1 = 123;
/a/ ['$1'] = 123;
といった方法はエラーになり、書き換えはできない。

RegExp.$1 = 123;
alert (/a/.$1);    // 123

new RegExp ('(a)').test ('a');
alert (RegExp.$1);    // a
alert (/a/.$1);    // a

new RegExp ('(a)').$1 = 123;
alert (/a/.$1);    // a

コメントを残す

メールアドレスが公開されることはありません。